【问题标题】:Output ArrayList to String without [,] (brackets) appearing将 ArrayList 输出到不出现 [,](括号)的字符串
【发布时间】:2015-12-22 19:21:49
【问题描述】:

好的,所以我有一个需要作为字符串返回的 ArrayList。现在我正在使用这种方法:

List<Customer> customers = new ArrayList<>();
List<Account> accounts = new ArrayList<>();


public String customerList() 
{
    String list = Arrays.toString(customers.toArray()); 
    return list;
}

public String accountList() 
{ 
    String account = Arrays.toString(accounts.toArray()); 
    return account;
}

这很好用,但问题是我在文本周围加了括号。我得到了类似的东西:

 Customer list:
 --------------
 [Name: Last, First
 , Name: Last, First
 , Name: Last, First
 ]

当我想要这样的东西时:

 Customer list:
 --------------
 Name: Last, First
 Name: Last, First
 Name: Last, First

但是,与类似的问题不同,我不想简单地逐行输出。我需要将 ArrayList 存储在不带括号的字符串中,以便使用它。

编辑: 应该注意的是,我希望它看起来像的版本中的一个逗号是由不同类中的方法放置在那里的:

public final String getName()  
    { 
        return getLast() + ", " + getFirst(); 
    }

编辑 2:通过调整我给出的两个答案,我能够找到一个完整的解决方案。很难决定哪个是“答案”,因为我发现两者都很有用,但选择了我可以更有选择性地使用的那个。

public String customerList() 
{
    String list = Arrays.toString(customers.toArray()).replace(", N", "N").replace(", N", "N");
    return list.substring(1,list.length()-1);
}

为了删除括号,我使用了修改后的返回。删除逗号需要我专注于每一行都以“N”开头的事实,但这种方法的缺陷是如果我忘记在此处更改它,如果我在那里更改它,代码会中断。尽管如此,它还是解决了我的具体问题,而且我总是可以根据需要在这两个地方给自己做笔记。

【问题讨论】:

  • 我不能为此使用字符串生成器。
  • String account = Arrays.toString(accounts.toArray()); return account.substring(1,account.length()-1);
  • @RodrigoGomes 啊哈!这删除了括号!我仍然看到额外的逗号,但这可能来自其他地方,所以我正在仔细检查。您可以将其发布为答案吗?
  • 为什么不能使用StringBuilder?如果您查看Arrays.toString 内部,您会发现它是通过将元素附加到StringBuilder 来实现的。我建议您从那里复制代码并删除负责附加逗号和括号的行。

标签: java arrays string arraylist


【解决方案1】:

您可以尝试用空格替换“[”和“]”

String list = Arrays.toString(customers.toArray()).replace("[", "").replace("]", "");

【讨论】:

  • 这种方法也有效 :) 当然,如果在字符串中需要括号,但它也可能是防止使用此类字符的好方法。
  • 你是对的。此解决方案仅真正满足您的特定解决方案。
  • 对。我试图将其调整为删除多余的逗号,因为另一个答案删除了括号,但不幸的是,这样做也删除了我想要的逗号。
  • 哦!无论如何我都能适应它!
  • java 8 : String listCustomers = list.stream().map(Object::toString).collect(Collectors.joining());
【解决方案2】:

Java 8 版本

List<Integer> intList = new ArrayList<Integer>();
intList.add(1);
intList.add(2);
intList.add(4);
System.out.println(intList.stream().map(i -> i.toString()).collect(Collectors.joining(",")));

输出: 1,2,4

【讨论】:

    【解决方案3】:

    一个可能的解决方案是:

    String account = Arrays.toString(accounts.toArray()); 
    return account.substring(1,account.length()-1);
    

    或者您是否覆盖toString 方法以根据需要返回字符串。

    【讨论】:

      【解决方案4】:

      可以直接将list/set转换为字符串并对其执行操作

      customers.toString().replace("[", "").replace("]", "")
      

      【讨论】:

        【解决方案5】:

        您可以使用方法 substring() 删除开始和结束括号,而不会篡改 ArrayList 中的任何条目。 我用这样的东西将ArrayList&lt;String&gt; 转换为字符串

        String str = list.toString().substring(1, list.toString().length() - 1);
        

        【讨论】:

        • 我发现这很有用,因为我不想删除字符串中的其他地方有 '[' 和 ']'。
        【解决方案6】:

        我认为打印不带括号且不带任何分隔符的列表的最佳解决方案(适用于 java 8 及更高版本)

        String.join("", YOUR_LIST);
        

        您还可以添加自己的分隔符来分隔打印元素。

        String.join(", \n", YOUR_LIST);
        

        上面的例子用逗号和换行分隔每个列表元素。

        【讨论】:

          【解决方案7】:

          如果您希望输出如下所示: item1、item2、item3

          Arrays.toString(customers.toArray()).replace('[', ' ').replace(']', ' ').trim()
          

          如果您希望输出如下所示: item1 item2 item3

          Arrays.toString(customers.toArray()).replace('[', ' ').replace(']', ' ').replace(',', ' ').trim()
          

          【讨论】:

            【解决方案8】:

            您可以覆盖 toString() 方法并以任何格式表示输出

            【讨论】:

              【解决方案9】:

              你可以试试这个。

              String listAsStr = myList.toString(); // get list as string
              listAsStr = listAsStr.substring(1,listAsStr.length()-1); // removing first and last bracket
              

              这将返回没有第一个和最后一个括号的字符串。

              【讨论】:

                【解决方案10】:

                任何人仍然坚持这一点,请尝试使用 for-each 循环。

                ArrayList<String> list = new ArrayList<>(); // default size of 10
                
                /*add elements to 
                the ArrayList*/
                
                for(String element: list)
                System.out.println(element);
                

                【讨论】:

                • 您是否阅读了问题中描述的问题?如果没有,请在尝试提供解决方案之前通读一遍。
                猜你喜欢
                • 2019-02-18
                • 2020-09-01
                • 2021-06-07
                • 1970-01-01
                • 2015-06-08
                • 2014-06-24
                • 1970-01-01
                • 2014-05-19
                • 2022-01-24
                相关资源
                最近更新 更多