将数组列表中的文本附加到String需要花费大量时间

时间:2014-04-10 12:24:18

标签: java arrays regex string arraylist

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


以便步骤为:

  1. 我将文本文件读入String(alltext)
  2. 将所有单词拆分为arraylist
  3. 处理该数组列表(假设我删除了所有停用词,如是,是,是)
  4. 在数组列表上处理之后我想把数组列表的所有单词放回字符串(alltext)
  5. 然后我必须使用该字符串(alltext) (alltext是在所有处理后必须包含文本的字符串)
  6. 问题在于,在第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
        }
    

    所以我只想要任何想法,这样我就可以减少高效处理的时间并放松机器!我会感谢任何建议和想法...... 谢谢

2 个答案:

答案 0 :(得分:2)

使用StringBuffer代替String

String是不可变的,因此每次附加时都会创建一个新的Object,这会使String变得越来越长。 StringBuffer是可变的,适用于像你这样的案件。

答案 1 :(得分:1)

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