【问题标题】:How to concat string values in array list如何在数组列表中连接字符串值
【发布时间】:2018-01-13 15:55:27
【问题描述】:

我需要使用 concat 一次打印所有 arraylist 值。

这是我的代码:

ArrayList<String> lst = new ArrayList<String>();
lst.add("hi");
lst.add("hello");
Iterator<String> itr = lst.iterator();
String result = null;

while(itr.hasNext()) {
   Object element = itr.next();
   result = element + " ";
}

System.out.println(result);

预期的结果应该是hi hello

然而,当前输出是hello(最后还有一个空格)。

【问题讨论】:

  • 请发布您收到的错误消息。还要发布一个可展示的版本,说明正在输入的内容和输出的外观。在这种状态下,问题有点不清楚。
  • 查看String 的javadoc,看看是否有任何方法可以让您更轻松地完成此操作。
  • 目前只输出hello[whitespace],以备记录。
  • 我认为,如果您仔细查看循环中每次分配给 result 的内容,您就会明白为什么会得到错误的答案。

标签: java arraylist collections iterator


【解决方案1】:

您的代码中的错误非常小。在每次迭代中,您为result 变量分配一个值。但是,您无需更新现有内容,只需将其删除并输入一个新值即可。

你是result = element + " "。但它应该类似于result = result + element + " " 或简而言之:

result += element + " ";

这样第一次迭代将在其中保存hi,然后hello附加导致hi hello(而不是覆盖第一次迭代的内容)。

请注意,它现在在末尾也有空格。您可以使用result = result.substring(0, result.length() - 1) 将其删除。或者不要在最后一次迭代中添加它,但是你需要计算迭代次数。


请注意,Java 有一个 StringJoiner 类,它可以完全按照您的要求进行操作,将一些元素连接在一起并使用像 空格 这样的分隔符。你可以这样使用它:

StringJoiner sj = new StringJoiner(" ");
while(itr.hasNext()) {
    Object element = itr.next();
    sj.add(element);
}
String result = sj.toString();

另请注意,由于 Java 8 有一个更短的版本:

String result = String.join(" ", list);

【讨论】:

    【解决方案2】:

    请选择List 接口而不是ArrayList 具体类型。假设您使用的是 Java 8+,您可能会使用 StreamCollectors.joining(和 Arrays.asList)之类的

    List<String> lst = Arrays.asList("hi", "hello");
    String r = lst.stream().collect(Collectors.joining(" "));
    System.out.println(r);
    

    哪些输出

    hi hello
    

    根据要求。

    【讨论】:

      猜你喜欢
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多