Java 什么';打印以逗号分隔的arraylist元素是一种简单而优雅的方法?

Java 什么';打印以逗号分隔的arraylist元素是一种简单而优雅的方法?,java,string,arraylist,Java,String,Arraylist,您好,我正在编写代码,以打印由逗号分隔的ArrayList中的所有元素,下面是我编写的方法。它起作用了。但我想知道它是否可以简化?还有没有一种更优雅的方法来打印由分隔符分隔的ArrayList中的所有元素?(例如,打印字符串数组列表获取“Tom,Sherlock,Jack”的方法) 谢谢大家 public String printMyArrayList() { if(mylist.size() == 0)return ""; else if(mylist.size() == 1)

您好,我正在编写代码,以打印由逗号分隔的ArrayList中的所有元素,下面是我编写的方法。它起作用了。但我想知道它是否可以简化?还有没有一种更优雅的方法来打印由分隔符分隔的ArrayList中的所有元素?(例如,打印字符串数组列表获取“Tom,Sherlock,Jack”的方法)

谢谢大家

public String printMyArrayList() {
    if(mylist.size() == 0)return "";
    else if(mylist.size() == 1)return mylist.get(0).toString();
    else {
        String returnStr = "";
        for (int i = 0; i < mylist.size() ; i++) {
            if(i == 0)returnStr = mylist.get(i).toString();
            else {
                returnStr = returnStr + ", " + mylist.get(i).toString();
            }
        }
        return returnStr;
    }
}
公共字符串printMyArrayList(){
如果(mylist.size()==0)返回“”;
else if(mylist.size()==1)返回mylist.get(0.toString();
否则{
字符串returnStr=“”;
对于(int i=0;i
一行

System.out.println(myArrayList.toString().replaceAll(“\\[\\]”,”)

即获取默认字符串表示形式(即
[1,2,3]
)并删除大括号。

使用Java 8:

return list.stream()
           .map(Object::toString)
           .collect(Collectors.joining(", "));

另一个Java 8解决方案使用:


我不知道你说的“简单优雅”是什么意思,但我同意你的说法

编辑:String.join可能是最好的方法

双重编辑:如下面的评论所指出的,不要使用此选项

public String printMyArrayList(ArrayList<String> list)
{
   String result = "";
   for(String s : list)
   {
      result += s + ", ";
   }
   return result.substring(0, result.length()-2);
}
公共字符串printMyArrayList(ArrayList列表)
{
字符串结果=”;
用于(字符串s:列表)
{
结果+=s+“,”;
}
返回result.substring(0,result.length()-2);
}
使用
List#toString
方法。它将随附
[]
。如果不想包含
[]
,则可以将其子串

   String listStr= list.toString();
   String withoutSym= listStr.substring(1, listStr.length()-1);
试试这个:

String delimiter = "";
StringBuilder sb = new StringBuilder();
for (Item x : list) {
    sb.append(delimiter).append(x);
    delimiter = ",";
}
您也可以使用


如果您正在使用android,请尝试以下方法:

android.text.TextUtils.join(", ", listOfObjects);
否则,spring框架中有一个util

org.springframework.util.StringUtils.arrayToCommaDelimitedString(listOfObjects);

在检查大小之前,请记住检查
mylist
是否为
null
,它可能会产生
NullPointerException
otherwise@Ian2thedv这可能是一件好事,因为列表从一开始就不应该为空。检查null会隐藏一个bug。@KarolKrol:OP自己会交替地称之为打印和加入。建议的(已经工作了!)代码称为
print..
,但实际上它并没有这样做。另外:打印可以用不同于先加入然后打印的方式进行编程,但没有理由这样做。这是非常低效的:它会产生很多临时字符串实例。很高兴知道,谢谢你。我承认我应该在这一点上多加考虑。我在每个循环上附加了分隔符,所以我必须删除最后一部分。我将把这个答案留在这里作为“如何不这样做”之类的东西。OP使用的是
item.toString()
,这表明这不是字符串列表或其他字符序列,所以
String.join
不能在这里使用。@Pshemo当然,但这不是问题的重点。连接是有趣的部分,不是将对象转换为字符串。我并不是说tit是一个糟糕的解决方案,但由于OP似乎在问如何优雅地打印任何元素的列表(不仅是
CharSequence
),我想说,提到这个解决方案,它只适用于可以用作
list
CharSequence[]
非常重要。
TextUtils
从哪里来?这就引出了一个问题:如何优雅地实现TextUtils.join(),因为它不是一个标准类。
Joiner.on(",").join(lst)
android.text.TextUtils.join(", ", listOfObjects);
org.springframework.util.StringUtils.arrayToCommaDelimitedString(listOfObjects);