2015-10-02 29 views
2

我们假设我有一个datastructuren元素(0, 1, ... , n-1)将列表打印到字符串时删除最后一个逗号或其他分隔符

并假设这些元素有一些我想要打印的属性(假设为int)。我想用一个分隔符(comma,space)在一行上打印datastructure。所以,结果会是这样的

13, 14, 15, 16, 17

什么是添加逗号和空格(在Java中)的最佳方式?

这些是我所采取的方针是:

  1. 如果datastructureIterable,从0 to n-2迭代,并追加分隔符到每台的,然后打印的最后一个元素。

  2. 遍历所有元素并将所有内容附加到空String(或Stringbuilder),然后在最后删除最后一个分隔符(hardcoded)。

我觉得有更好的东西。

编辑:这个问题是独一无二的。 “可能的重复”只涉及打印,而不涉及分隔符。

EDIT2:尝试的要求

// 1st approach 
public void printStuff(ArrayList<Integer> input) { 
    for (int i=0; i<input.size()-1; i++) { 
     System.out.print(input.get(i) + ", "); 
    } 
    System.out.println(input.get(input.size()-1); 
} 

的另一种尝试

// 2nd approach 
public void printStuff(ArrayList<Integer> input) { 
    StringBuilder sb = new StringBuilder(); 
    for (int i=0; i<input.size(); i++) { 
     sb.append(input.get(i)+", "); 
    } 
    sb.substring(0, input.size()-2); 
    System.out.println(sb.toString()); 
} 
+3

请张贴您的尝试代码。 –

+0

如果你的列表元素是自定义对象,你也可以通过重写'Object#toString'来改变它们的表示形式。 – Mena

+0

看看Guava的'Joiner'类的代码,看看它是如何实现的。或者'java.util.Arrays.toString'。 –

回答

6

的Java 8的流媒体的API终于提供了这样的一个优雅的,本地的,途径,无需丑陋的if-else结构或使用第三方。

假设你有MyClass对象的列表,并假设MyClass已返回一个int一个getPropery()访问方法,你可以做这样的事情:

List<MyClass> list = ...; 
String concatination = list.stream() 
          .map(p -> String.valueOf(p.getProperty())) 
          .collect(Collectors.joining(", ")); 
+0

真棒的答案。谢谢!你有一个特定的在线资源,我可以阅读更多关于此? – jiaweizhang

+1

@jiaweizhang [Oracle的教程](https://docs.oracle.com/javase/tutorial/collections/streams/index.html)相当不错。 – Mureinik

1

使用迭代器我会检查是否还有剩余的项目。 如果是这样,添加一个分隔符:

if (i.hasNext()) s.append(", "); 
1

使用一些Java 8个流法宝:

List<Integer> list = Arrays.asList(1, 2, 3) //just so we have a list to work on 
String result = list.stream() 
     .map(it -> it.toString()) 
     .collect(Collectors.joining(", ")) 
0

您可以删除第一个元素,把它添加到您的字符串,并添加, <string>它:

List<String> lst = new ArrayList<String>(); 

// add elements 

StringBuilder buffer = new StringBuilder(); 
buffer.append(lst.remove(0)); 

for(String s : lst) { 
    buffer.append(", ").append(s); 
} 
+0

这与我为尝试2做的事情虽然倒退了一样,尽管它确实照顾了硬编码的尾件。 – jiaweizhang

相关问题