Java 执行频率的以下代码中出现错误
大家好,我想根据文件的频率对其文本进行排序。我在运行时遇到了错误outofmemory Error。请尽快给出响应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
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