我试图做类似的事情:
ArrayList<String> getMerged ( String host, String port, String filesToCopy ){
ArrayList<String> merged = new ArrayList<String>();
merged.add(host);
merged.add(port);
merged.addAll(filesToCopy.split(",")); //which is invalid
return merged;
}
我想知道我们是否可以添加 filesToCopy.split(&#34;,&#34;)的元素而不会产生使用循环的开销。
另外,如果上面的操作可以在字符串数组中完成,比如说 String [] merged (如果需要的话,也可以将filesToCopy作为String []传递),那么它会更好结束,我将把这个arrayList转换成一个数组。
我是Java编程的新手,所以请不要介意这是一个愚蠢的问题。
答案 0 :(得分:1)
您可以在一个阵列中执行此操作:
String[] files = filesToCopy.split(","); // filesToCopy is an ArrayList, so I'm not
// sure how this works; I'm assuming it's
// a typo. Just get the files array somehow
String[] merged = new String[2 + files.length];
merged[0] = host;
merged[1] = port;
for (int i = 2; i < merged.length; i++) {
merged[i] = files[i-2];
}
或者,没有“循环的开销”:
merged[0] = host;
merged[1] = port;
System.arraycopy(files, 0, merged, 2, files.length);
当然,这仍然使用“幕后”循环,这是不可避免的。
答案 1 :(得分:1)
ArrayList.addAll方法需要Collection作为参数,所以只需传递filesToCopy:
String [] getMerged ( String host, String port, ArrayList<String> filesToCopy ){
ArrayList<String> merged = new ArrayList<String>();
merged.add(host);
merged.add(port);
merged.addAll(filesToCopy);
return merged.toArray(new String[merged.size());
}
PS:我只是一个意见问题,但如果我可以在数组和集合之间进行选择,我总是喜欢使用集合(List,Set)。可变尺寸和易插入是需要考虑的事项。
答案 2 :(得分:1)
我不确定您的需求是什么。但我相信以下方法中的任何一种都一定能帮助您..
1.Covert String with Comma To ArrayList
<强>程序:强>
import java.util.Arrays;
....
String name="java,php,c";
List<String> list=Arrays.asList(name.split(","));
System.out.println(" "+list);
<强>输出:强>
[java, php, c]
2.Covert ArrayList To StringArray
这里我们可以将第一种方法中得到的相同的arraylist转换为字符串数组。
<强>程序:强>
String []names=list.toArray(new String[list.size()]);
for(String s:names){
System.out.println(""+s);
}
<强>输出:强>
java
php
c
3.Covert ArrayList To Comma Seperated String
这里我们可以将第一种方法中得到的相同的arraylist转换为字符串数组。
为此,您需要将commons-lang3-3.2.1.jar添加到类路径或项目库中。
您可以下载commons-lang3-3.2.1.jar(HERE)
<强>程序:强>
import org.apache.commons.lang3.StringUtils;
.....
String name=StringUtils.join(list, ",");
System.out.println("name="+name);
<强>输出:强>
name=java,php,c
4.更新程序
这可能是我需要的方法
public String[] getMerged(String host, String port, String filesToCopy) {
String files[] = filesToCopy.split(",");
String[] merged = new String[(2 + files.length)];
merged[0] = host;
merged[1] = port;
System.arraycopy(files, 0, merged, 2, files.length);
return merged;
}
检查这些方法,如果您的需求不是这些方法,请通知我。