我有一个带有一些字符串的ArrayList.我想将ArrayList中的数字列表存储在由逗号分隔的单个字符串中,如下所示.
- String s = "350000000000050287,392156486833253181,350000000000060764"
这是我的清单:
- List<String> e = new ArrayList<String>();
- e.add("350000000000050287");
- e.add("392156486833253181");
- e.add("350000000000060764");
我一直试图通过以下方式实现:
- StringBuilder s = new StringBuilder();
- for (String id : e){
- s.append(id+",");
- }
唯一的问题是,这会在最后添加一个逗号,我不希望这样.最好的方法是什么?
谢谢
解决方法
最简单的解决方案是使用
String.join:
- List<String> list = new ArrayList<String>();
- list.add("11");
- list.add("22");
- list.add("33");
- String joined = String.join(",",list);
- System.out.println(joined);
- //prints "11,22,33"
请注意,这需要Java 8.
- StringBuilder sb = new StringBuilder();
- Iterator<String> iterator = list.iterator();
- // First time (no delimiter):
- if (iterator.hasNext()) {
- sb.append(iterator.next());
- // Other times (with delimiter):
- while (iterator.hasNext()) {
- sb.append(",");
- sb.append(iterator.next());
- }
- }
或者只是使用布尔值来确定第一次:
- StringBuilder sb = new StringBuilder();
- boolean firstTime = true;
- for (String str : list) {
- if (firstTime) {
- firstTime = false;
- } else {
- sb.append(",");
- }
- sb.append(str);
- }
但后者显然不如使用迭代器比较每个方法生成的字节码.然而,正如Tagir Valeev所指出的那样,这可能不是真的:这个benchmark向我们表明,使用标志的性能更高,从10开始进行多次迭代.
如果有人能解释为什么会这样,我很高兴知道.