代码:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class readword {
public static String[] Return()
{
String[] mws=null;
List<String> strList = new ArrayList<String>();// 定义一个List存储读取的文本内容
List<Integer> flags = new ArrayList<Integer>();// 定义一个List存储keyword出现的行
// System.out.println(“输入分子量前的标识串如> <MOLECULAR_WEIGHT>”);
// String filter=scanner.next();//分子量前的标识串filter如> <MOLECULAR_WEIGHT>
Pattern p = Pattern.compile(“> <Mass>”);// 调用Pattern的compile方法编译要匹配的正则
Matcher m;
int j = 0, k = 0;// i=1为输出下一行内容;j为mws表长;k为记录总数
int i=1;
{
Reader re = null;
try {
re = new FileReader(new File(“E:/167m.sdf”));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BufferedReader bre = new BufferedReader(re,5*1024*1024);
try {
while (bre.ready()) {
String str = bre.readLine();
strList.add(str);
m = p.matcher(str);
if (m.find())// 查找正则匹配的子串是否存在
{
flags.add(i);// 记录匹配的行
}
i++;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (k = 0; k < flags.size(); k++) {
/*System.out.println(“分子” + (k + 1) + “的分子量为”
+ strList.get(flags.get(k)));// 干你想干的事
*/ }
System.out.print(“共有” + k + “条记录”);
mws = new String[k];// 所有的分子量集合
for (j = 0; j < mws.length; j++) {
mws[j] = strList.get(flags.get(j));
}
System.out.println(Arrays.toString(mws));// 输出所有分子量的集合
}
return mws;
}
}
目前读10多m的文件没问题,前几天也可以读100多m的文件,今天不造改哪个地方了连100多的都运行不了。
异常代码:
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
at java.util.regex.Matcher.<init>(Matcher.java:207)
at java.util.regex.Pattern.matcher(Pattern.java:888)
at readword.Return(readword.java:41)
at HashTable.hash(HashTable.java:36)
at main.main(main.java:32)
heap也设置过了 100m总不能超过内存吧。。。。弄了一天也没弄明白,希望大神们帮忙看眼TUT