读取文本文件test.txt, 然后通过空行分出每一个人的信息记录,每一个人的信息包括name, birthday, phone, email, property 等字段信息。随后把每个人的信息存入一个person对象中,再把person对象存入到arraylist中。我的问题是: 如何用空行去鉴别一个记录。我用了:
Scanner scanner = new Scanner(new FileReader("test.txt")).useDelimiter("\\r\\n");
while(scanner.hasNext()) {
System.out.println("开始于一条新纪录:" + scanner.next()) ;
}
但是,打印结果并不是想想的那样。到底问题出在哪里呢?
=============================================
test.txt文本文件内容如下:
name Testing Three
birthday 1980
phone 333333
email [email protected]
property Housename Testing Two
phone 22222222
birthday 13-5-1980
property Townhouse
email [email protected]
address 2/3-7 Castle St, Castle hill, 2154name Testing Four
qualification Bachelor
phone 4444444
birthday 13-15-1980
email [email protected]
address 3 Bridge St, Gordon, 2072name Testing One
phone 111111111
email [email protected]
birthday 13-5-1980
address 5 Bridge
St, Gordon, 2072
property House
Scanner scanner = new Scanner(new FileReader("test.txt")).useDelimiter("\\r\\n");
while(scanner.hasNext()) {
System.out.println("开始于一条新纪录:" + scanner.next()) ;
}
但是,打印结果并不是想想的那样。到底问题出在哪里呢?
=============================================
test.txt文本文件内容如下:
name Testing Three
birthday 1980
phone 333333
email [email protected]
property Housename Testing Two
phone 22222222
birthday 13-5-1980
property Townhouse
email [email protected]
address 2/3-7 Castle St, Castle hill, 2154name Testing Four
qualification Bachelor
phone 4444444
birthday 13-15-1980
email [email protected]
address 3 Bridge St, Gordon, 2072name Testing One
phone 111111111
email [email protected]
birthday 13-5-1980
address 5 Bridge
St, Gordon, 2072
property House
你的问题在于scanner.hasNext(),
email [email protected]
property Housename Testing Two
phone 22222222
这中间是有一个空行,但是它毕竟是存在的一行,因此scanner.hasNext()还是为true。
scanner.hasNext()只有到了最后一行才为false。解决方案:
scanner.next().matches("\\s*")希望对你有用!
是说明这一行为空,或者有很多空格,总之没有内容!
if(scanner.next().matches("\\s*")) {
System.out.println("开始于一条新纪录:") ;
System.out.println(scanner.next()) ;
}
}仍然不是满意的结果。
Reader in = new FileReader(Test.class.getResource("test.txt").getPath());
BufferedReader bufIn = new BufferedReader(in); List<String> values = new ArrayList<String>();
String line = null;
while ((line = bufIn.readLine()) != null) {
values.add(line.trim());
}
int size = values.size();
for (int i = 0; i < size; i++) {
String value = values.get(i);
if ("".equals(value) || size == (i + 1)) {
// 如果是换行/末尾就把数据转换成一个对象添加到新的List中去
}
}
while(scanner.hasNext()) {
System.out.println("开始于一条新纪录:" + scanner.next()) ;
}把\\r\\n 改为\\n{2} 就可以了