【急,在线等】java正则表达式,分割文件内容
读取文本文件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 testing3@usyd.edu.au
property House
name Testing Two
phone 22222222
birthday 13-5-1980
property Townhouse
email testing2@usyd.edu.au
address 2/3-7 Castle St, Castle hill, 2154
name Testing Four
qualification Bachelor
phone 4444444
birthday 13-15-1980
email testing4@usyd.edu.au
address 3 Bridge St, Gordon, 2072
name Testing One
phone 111111111
email testing1@usyd.edu.au
birthday 13-5-1980
address 5 Bridge
St, Gordon, 2072
property House
------解决方案--------------------这个问题很简单。
你的问题在于scanner.hasNext(),
email testing3@usyd.edu.au
property House
name Testing Two
phone 22222222
这中间是有一个空行,但是它毕竟是存在的一行,因此scanner.hasNext()还是为true。
scanner.hasNext()只有到了最后一行才为false。
解决方案:scanner.next().matches("\\s*")
希望对你有用!
------解决方案--------------------Java code
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中去
}
}
------解决方案--------------------
很简单,正则写错了。
Scanner scanner = new Scanner(new FileReader("test.txt")).useDelimiter("\\n{2}");
while(scanner.hasNext()) {
System.out.println("开始于一条新纪录:" + scanner.next()) ;
}
把\\r\\n 改为\\n{2} 就可以了