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

Java 将列表打印为字符串时删除最后一个逗号或其他分隔符,java,string,Java,String,假设我有一个数据结构,其中包含n元素(0,1,…,n-1) 假设这些元素有我想要打印的属性(假设是int)。我想用分隔符(逗号,空格)将数据结构打印在一行上。所以,结果是这样的 13,14,15,16,17 添加逗号和空格的最佳方法是什么(在Java中) 以下是我采取的方法: 如果datastructure是Iterable,则从0迭代到n-2,并将分隔符附加到其中每个元素,然后打印最后一个元素 循环遍历所有元素并将所有内容附加到空的String(或Stringbuilder),然后在最后移除最

假设我有一个
数据结构
,其中包含
n
元素
(0,1,…,n-1)

假设这些元素有我想要打印的属性(假设是
int
)。我想用分隔符(
逗号
空格
)将
数据结构打印在一行上。所以,结果是这样的

13,14,15,16,17

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

以下是我采取的方法:

  • 如果
    datastructure
    Iterable
    ,则从
    0迭代到n-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);
    }
    
    //第一种方法
    public void printStuff(ArrayList输入){
    
    对于(int i=0;i您可以使用一个框架,如下所示:

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


    Joiner.on(“,”).join(list)

    使用迭代器,我会检查是否还有剩余项。 如果是,请添加分隔符:

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

    Java8的流式API最终提供了一种优雅的、本机的方式来实现这一点,而无需求助于丑陋的if-else结构或使用第三方

    假设您有一个
    MyClass
    对象列表,并且假设
    MyClass
    有一个返回
    int
    getPropery()
    访问方法,您可以执行以下操作:

    List<MyClass> list = ...;
    String concatination = list.stream()
                               .map(p -> String.valueOf(p.getProperty()))
                               .collect(Collectors.joining(", "));
    
    List=。。。;
    字符串concatation=list.stream()
    .map(p->String.valueOf(p.getProperty()))
    .collect(收集器。连接(“,”);
    
    使用一些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(", "))
    
    List List=Arrays.asList(1,2,3)//这样我们就有了一个要处理的列表
    字符串结果=list.stream()
    .map(it->it.toString())
    .collect(收集器.连接(“,”))
    
    您可以删除第一个元素,将其添加到字符串中,然后添加

    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);
    }
    
    List lst=new ArrayList();
    //添加元素
    StringBuilder缓冲区=新的StringBuilder();
    buffer.append(lst.remove(0));
    用于(字符串s:lst){
    buffer.append(“,”).append(s);
    }
    
    请为您的尝试发布代码。如果您的列表元素是自定义对象,您也可以通过覆盖
    对象#toString
    或Java 8来更改它们的表示形式。它的可能重复令人惊讶,在Java中必须处理的问题非常琐碎……回答得非常好。谢谢!您有我可以访问的特定在线资源吗阅读更多关于这方面的内容?@jiaweizhang相当不错。这和我在尝试2中做的一样,虽然是向后的,但它确实处理了硬编码的结尾。