将列表打印到字符串时删除最后一个逗号或其他分隔符

时间:2015-10-02 14:10:35

标签: java string

假设我有一个datastructure n元素(0, 1, ... , n-1)

并假设这些元素有一些我想要打印的属性(假设int)。我想在一行打印datastructure,并带有分隔符(commaspace)。所以,结果将是这样的

13, 14, 15, 16, 17

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

这些是我采取的方法:

  1. 如果datastructureIterable,则从0 to n-2进行迭代,并将分隔符附加到每个分隔符,然后打印最后一个元素。

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

  3. 我觉得有更好的东西。

    编辑:这个问题很独特。 '可能重复'只涉及打印,而不是弄乱分隔符。

    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());
    }
    

5 个答案:

答案 0 :(得分:6)

Java 8的流式API最终提供了一种优雅的原生方式,无需借助丑陋的if-else结构或使用第三方。

假设您有MyClass个对象的列表,并假设MyClassgetPropery()访问方法返回int,您可以这样做:

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

答案 1 :(得分:1)

使用迭代器我会检查是否还有任何项目。 如果是这样,请添加分隔符:

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

答案 2 :(得分:1)

使用一些Java 8 Stream魔法:

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(", "))

答案 3 :(得分:0)

您可以使用框架,如下所示:

https://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/base/Joiner.html

Joiner.on( “”)。加入(列表)

答案 4 :(得分: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);
}