在以下实施频率代码中出现错误

时间:2014-01-02 16:54:50

标签: java collections

Hello EveryOne我想根据频率对文件的文本进行排序。我在运行时输出错误内存错误。请尽快给出回复。

import java.io.*; 

import java.util.*;

import java.util.Collections;   

class SortedInAlphaOrder

 {

public static void main(String a[]) throws IOException{

          Scanner input = new Scanner(System.in);

          System.out.println("Enter the filename with path : " );

          //String filename = input.next();

          File f = new File("Ashish.txt");

          BufferedReader br = new BufferedReader(new FileReader(f));

          StringBuffer buffer = new StringBuffer();

          String str =br.readLine();

          while((str!= null)){

          buffer.append(str);

          buffer.append(" ");

          }

          ArrayList<String> list = new ArrayList<String>();


       StringTokenizer st = new StringTokenizer(buffer.toString().toLowerCase());

          while(st.hasMoreTokens()){

                String s = st.nextToken();

                list.add(s);

                }

            HashSet<String> set = new HashSet<String>(list);

            List<String> arrayList = new ArrayList<String>(set);

            Collections.sort(arrayList);

            for(Object ob : arrayList){

                    System.out.println(ob.toString());

                }

            }           }

错误OutofMemoryHeap Error.Help me out。

2 个答案:

答案 0 :(得分:5)

我想我看到了你的问题。您将str分配给br.readLine()一个,但您的while循环仅在str == null时停止。我假设第一个br.readLine()正在返回非空String,并且您在while循环中继续检查它是否为null。因此,您的wile循环永远不会停止,最终会出现OutOfMemory错误。相反,你应该改变你的代码(未经测试)。

// ...other code
String str;
while((str = br.readLine()) != null){
      buffer.append(str);
      buffer.append(" ");
}
// ...other code

答案 1 :(得分:0)

你似乎做了非常多余的事情。您应该将这些单词直接带入Collection并对其进行排序。

无论如何,你总是可以通过提供-Xmx128M选项来增加内存来执行相同的程序。