加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何从ArrayList获取String值并将它们存储在Java 8中用逗号分隔

发布时间:2020-12-14 23:34:39 所属栏目:Java 来源:网络整理
导读:我有一个带有一些字符串的ArrayList.我想将ArrayList中的数字列表存储在由逗号分隔的单个字符串中,如下所示. String s = "350000000000050287,392156486833253181,350000000000060764" 这是我的清单: ListString e = new ArrayListString(); e.add("3500000
我有一个带有一些字符串的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.

但是,如果要支持旧版本的Java,可以使用迭代器修复代码:

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开始进行多次迭代.

如果有人能解释为什么会这样,我很高兴知道.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读