Java 执行频率的以下代码中出现错误

Java 执行频率的以下代码中出现错误,java,collections,Java,Collections,大家好,我想根据文件的频率对其文本进行排序。我在运行时遇到了错误outofmemory Error。请尽快给出响应 import java.io.*; import java.util.*; import java.util.Collections; class SortedInAlphaOrder { public static void main(String a[]) throws IOException{ Scanner input = new

大家好,我想根据文件的频率对其文本进行排序。我在运行时遇到了错误outofmemory Error。请尽快给出响应

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());

                }

            }           }
import java.io.*;
导入java.util.*;
导入java.util.Collections;
按字母顺序分类
{
公共静态void main(字符串a[])引发IOException{
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入路径为:”)的文件名;
//字符串文件名=input.next();
文件f=新文件(“Ashish.txt”);
BufferedReader br=新的BufferedReader(新文件读取器(f));
StringBuffer=新的StringBuffer();
字符串str=br.readLine();
while((str!=null)){
buffer.append(str);
缓冲区。追加(“”);
}
ArrayList=新建ArrayList();
StringTokenizer st=新的StringTokenizer(buffer.toString().toLowerCase());
而(st.hasMoreTokens()){
字符串s=st.nextToken();
列表。添加(s);
}
HashSet set=新的HashSet(列表);
列表arrayList=新建arrayList(集合);
Collections.sort(arrayList);
for(对象对象对象:arrayList){
System.out.println(ob.toString());
}
}           }

正在从内存堆错误中获取错误。请帮助我解决。

您似乎在做非常多余的事情。您应该将单词直接放入集合并对其进行排序


无论如何,通过提供
-Xmx128M
选项,您始终可以在增加内存的情况下执行相同的程序。

我想我看到了您的问题。将
str
分配给
br.readLine()
one,但while循环仅在
str==null
时停止。我假设第一个
br.readLine()
返回一个非空的
字符串
,并且您在while循环中不断检查它是否为
null
。因此,您的wile循环从未停止过,最终会出现
OutOfMemory
错误。相反,您应该像这样更改代码(未测试)


Ashish.txt有多大?所以你创建一个列表,从中创建一个集合,从中创建一个列表,并将所有这些保存在内存中。。。
// ...other code
String str;
while((str = br.readLine()) != null){
      buffer.append(str);
      buffer.append(" ");
}
// ...other code