Java 什么';打印以逗号分隔的arraylist元素是一种简单而优雅的方法?
您好,我正在编写代码,以打印由逗号分隔的ArrayList中的所有元素,下面是我编写的方法。它起作用了。但我想知道它是否可以简化?还有没有一种更优雅的方法来打印由分隔符分隔的ArrayList中的所有元素?(例如,打印字符串数组列表获取“Tom,Sherlock,Jack”的方法) 谢谢大家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)
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);