【问题标题】:Converting an array list to a single string将数组列表转换为单个字符串
【发布时间】:2012-09-11 14:19:48
【问题描述】:

我正在为我正在做的任务编写一段代码,但我完全被 1 点所困。

我需要将一个数组列表的内容转换成一个字符串,或者一个字符串的形式,这将能够被输入到 toString() 以便它被打印到屏幕上。

public String toString(){
    String full;
    full = (this.name + this.address + "\n" + "Student Number = " + this.studentId);
    for (int i = 0; i < cs.size(); i++) {
        full.append(cs[i]);
    return full;

上面的代码是我尝试将 3 个变量和数组列表的内容组合成一个带有格式的字符串的地方。

不幸的是,它会产生错误“表达式的类型必须是数组类型,但它解析为 ArrayList”

感谢您的帮助。

杰克

【问题讨论】:

  • 你需要使用StringBuilder而不是String来构建一个String。
  • 我建议使用StringBuilder 而不是+ 作为String

标签: java arrays string list compilation


【解决方案1】:

cs是数组列表,所以你必须做get操作,而不是[](用于数组访问)

应该是这样的:

full.append(cs.get(i));

没有

full.append(cs[i]);

编辑:正如 assylis 所说,full 应该是 StringBuilder 而不仅仅是 String,因为 String 不支持 append() 方法。

StringBuilder full = new StringBuilder();

【讨论】:

  • @assylias:是的,编辑了我的答案。我比其他部分更关注错误。
  • 只需稍作修改即可使用,非常感谢您的帮助。
【解决方案2】:

Apache Commons StringUtils 有不同种类的join() 方法,这意味着您不必自己编写。您可以指定分隔符,甚至可以指定前缀/后缀。

我建议你看看 Apache Commons,不仅仅是为了这个,还有很多其他有用的东西。

【讨论】:

    【解决方案3】:

    您正在尝试访问ArrayList,就好像它是一个原始数组(使用索引周围的方括号)。尝试改用get(int index) 方法。

    即,

    cs.get(i);
    

    【讨论】:

      【解决方案4】:

      您不能像数组一样索引ArrayList,您需要get(index) 方法。更好的是,使用增强的 for 循环,因为不建议对列表进行索引,因为实现可能会更改为 LinkedList

      为了提高效率,我还建议使用StringBuilder

      public String toString() {
          StringBuilder full = new StringBuilder();
          full.append(this.name);
          full.append(this.address);
          full.append("\n");
          full.append("Student Number = ");
          full.append(this.studentId);
          for (String s: cs)
              full.append(s);
          return full.toString();
      }
      

      【讨论】:

        【解决方案5】:

        只需使用 “cs.get(i)”代替“cs[i]”。 因为 cs 是 ArrayList 而不是 Array。

        并且还使用 完整 = 完整 + cs.get(i);而不是 full.append(cs.get(i));

        因为字符串类型没有附加方法。

        【讨论】:

          【解决方案6】:

          请注意,因为您没有在ArrayList 的每个元素之间放置任何分隔符,所以它可能不可读。考虑使用 Guava 的 Joiner 类。

          所以不是

           for (...)
             s.append(y);
          

          如果是

             a.append(Joiner.on(" ").join(yourList));
          

          Joiner 也比 for 循环更有效,因为它在内部使用 StringBuilder

          【讨论】:

            猜你喜欢
            • 2013-10-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-07-14
            • 2015-11-24
            • 1970-01-01
            相关资源
            最近更新 更多