import java.io.*;
import java.util.*;
import java.util.regex.*;public class J {
public static void main(String[] args) throws Exception { String input = "F:/shiyan.txt";
Pattern p = Pattern.compile("\\d+");
List<Double> arr = new ArrayList<Double>();
FileReader in = new FileReader(input);
BufferedReader data = new BufferedReader(in);
while (data.readLine() != null) {
String str = data.readLine().trim();
System.out.println(str);//测试到底读了哪行
Matcher m = p.matcher(str);
while (m.find()) {
arr.add(Double.parseDouble(m.group()));
}
}
double[] inputArray = new double[arr.size()]; for (int i = 0; i < arr.size(); i++ ){
inputArray[i] = arr.get(i);
System.out.println(inputArray[i]);
}
}
} 程序运行后,只显示偶数行的内容,为什么readLine()没有从第一行读。 为了简单的测试一下,我又加了句while (data.readLine() != null) {
System.out.println(data.readLine());
String str = data.readLine().trim();
System.out.println(str);//测试到底读了哪行
Matcher m = p.matcher(str);
while (m.find()) {
arr.add(Double.parseDouble(m.group()));
}
} 运行后抛出Exception in thread "main" java.lang.NullPointerException
at J.main(J.java:19)
想了好长时间都没得要领,望达人解惑,不胜感激!
while (data.readLine() != null) {
String str = data.readLine().trim();你在判断条件中已经读了一行,下面又调用readLine再读一行,这样你就只读偶数行了,哈哈。
String str = data.readLine().trim();
while (str != null) {
...
//在最后写一个
str = data.readLine().trim();
}
这样应该能解决你的问题了。你后来的时候改的一下子读了3行,这样肯定会报错了。
String str = data.readLine();
while (str != null) {
Matcher m = p.matcher(str);
while (m.find()) {
arr.add(Double.parseDouble(m.group()));
}
}
多谢朋友们的回答!
改了一下,再次运行不动了,调出任务管理器一看,嚯,好家伙,CPU已经100%了,死循环么?
while ((str = data.readLine()) != null) {
System.out.println(str);
Matcher m = p.matcher(str);
while (m.find()) {
arr.add(Double.parseDouble(m.group()));
}
}
BufferedReader reader = ...;for(String text = reader.readLine(); text != null; text = reader.readLine()){
process(text);
}