【问题标题】:Appending text from array list to a String takes a lot of time将数组列表中的文本附加到字符串需要很多时间
【发布时间】:2014-04-10 12:24:18
【问题描述】:

我正在阅读一个简单的记事本文本文件,其中包含许多实际大小为 3mb 的数据,因此您可以想象它可以包含的字数!问题是我正在将该文件读入一个字符串,然后拆分该字符串,以便我可以将每个单词保存在 ArrayList(String) 中。它对我来说很好,但实际问题是我出于某种目的处理这个数组列表,然后我必须再次追加,或者你可以说将数组列表的所有单词放回字符串!


所以步骤是:

  1. 我将一个文本文件读入一个字符串(全文本)
  2. 将所有单词拆分成一个数组列表
  3. 处理该数组列表(假设我删除了所有停用词,例如 is、am、are)
  4. 在对数组列表进行处理后,我想将数组列表的所有单词放回字符串(alltext)
  5. 那么我必须使用该字符串(全文本) (alltext是所有处理后必须包含文本的字符串)

问题在于,在第 4 步,将所有单词附加回我的代码是:


BufferedReader br = new BufferedReader(new FileReader(file));
String line = "";
while ((line = br.readLine()) != null) {
   alltext += line.trim().replaceAll("\\s+", " ") + " ";
}
br.close();

    //Adding All elements from all text to temp list            
    ArrayList<String> tempList = new ArrayList<String>();
    String[] array = alltext.split(" ");
    for (String a : array) {
        tempList.add(a);
    }

    //remove stop words here from the temp list

    //Adding File Words from List  in One String 
    alltext = "";

    for (String removed1 : tempList) {
        System.out.println("appending the text");
        alltext += removed1.toLowerCase() + " ";
        //here it is taking a lot of time suppose 5-10 minutes for a simple text file of even 1.4mb
    }

所以我只是想知道任何想法,以便我可以减少有效处理的时间并放松机器!我会感谢任何建议和想法... 谢谢

【问题讨论】:

  • 为什么要创建和使用单独的List?使用数组本身。
  • 您是否分析过您的代码以准确找出哪个循环花费的时间最多?
  • for (String removed1 : tempList) 这段代码需要很多时间
  • 并使用StringBuilder 而不仅仅是连接。

标签: java arrays regex string arraylist


【解决方案1】:

使用StringBuffer 而不是String

String 是不可变的,因此每次追加时都会创建一个新对象,这会花费越来越多的时间,因为字符串变得越长。 StringBuffer 是可变的,适合您的情况。

【讨论】:

  • 上次耗时=5 分 32 秒,使用 stringbuffer 或 string builder 后,时间减少到 1 分 2 秒,感谢您的想法!
【解决方案2】:

我会推荐StringBuilder 根据这个stringbuilder-and-stringbuffer-in-java 它比StringBuffer 快还要检查你是否需要ArrayList 因为你也可以遍历数组

【讨论】:

    猜你喜欢
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2013-12-07
    • 2012-12-05
    • 2014-02-25
    • 2012-09-14
    • 2015-01-22
    相关资源
    最近更新 更多