【问题标题】:trying to build a stringBuffer using array尝试使用数组构建 stringBuffer
【发布时间】:2017-04-18 21:19:43
【问题描述】:

这是我使用数组构建 stringBuffer 的尝试。我该如何解决这个问题?

import java.util.ArrayList;
public class StringBufferProj {
public static String appendItems(ArrayList list){
    StringBuffer b = new StringBuffer();
    for (int i=0; i<list.length(); i++) {
        b.append(list(i));
        b.append(" ");
    }
    return b.toString();
    }

    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add("StringBuilder ");
        list.add("executes ");
        list.add("multiple ");
        list.add("threads ");
        list.add("at ");
        list.add("a ");
        list.add("time ");
System.out.println(StringBufferProj.appendItems(list));
    }

}

感谢您的帮助。

【问题讨论】:

  • 有什么问题需要帮助?
  • List.toString()怎么了?
  • 但是,List(和ArrayList)有一个.size() 方法,而不是.length。而list(i) 可能应该类似于list.get(i)

标签: java arrays stringbuffer


【解决方案1】:

首先,编程到List 接口并且不要使用原始类型。另外,比起StringBuffer,更喜欢StringBuilder,你可以使用for-each 循环。

public static String appendItems(List<String> list) {
    StringBuilder b = new StringBuilder();
    for (String str : list) {
        b.append(str).append(" ");
    }
    return b.toString();
}

,在 Java 8+ 中,带有类似的流

public static String appendItems(List<String> list) {
    return list.stream().collect(Collectors.joining(" "));
}

然后调用它,你可以使用

public static void main(String[] args) {
    List<String> list = new ArrayList<>(Arrays.asList("StringBuilder ", //
            "executes ", "multiple ", "threads ", "at ", "a ", "time "));
    System.out.println(appendItems(list));
}

【讨论】:

    【解决方案2】:

    你的代码应该是这样的

    public static String appendItems(ArrayList<String> list) {
        StringBuffer b = new StringBuffer();
        for (int i = 0; i < list.size(); i++) {
            b.append(list.get(i));
            b.append(" ");
        }
        return b.toString();
    }
    

    变化是
    1. 方法签名-为列表元素添加类型ArrayList&lt;String&gt;
    2.在Java列表接口中不包含length()方法而是size()方法。
    3. 要从列表中获取元素,您应该使用 get 方法 - list.get(i)

    从 Java 7 开始,您可以使用增强的 for 循环。我会把你的代码重构成这样的

    public static String appendItems(ArrayList<String> list) {
        StringBuffer buffer = new StringBuffer();
        for (String word : list) {
            buffer.append(word).append(" ");
        }
    
        return buffer.toString();
    }
    

    最后,从 Java 8 开始,您可以使用流和收集器

    public static String appendItems(ArrayList<String> list) {
        String result = list.stream().collect(Collectors.joining(" "));
    
        return result;
        // or just 
        // return list.stream().collect(Collectors.joining(" "));
    }
    

    【讨论】:

      【解决方案3】:

      (在 Java 中有更好的方法可以做到这一点。但是,基于您的原始代码) 您可以使用get()ArrayList 获得一个元素。如果您还为ArrayList 定义了类型,那么您就不需要强制转换类型并且阅读起来更清晰:

      public static String appendItems(ArrayList<String> list) {
          StringBuffer b = new StringBuffer();
          for (int i = 0; i < list.size(); i++) {
              b.append(list.get(i));
              b.append(" ");
          }
          return b.toString();
      }
      

      【讨论】:

      • size() 而不是length()
      猜你喜欢
      • 2020-07-01
      • 1970-01-01
      • 2021-08-04
      • 2017-11-20
      • 2014-01-19
      • 2014-06-28
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多