日期:2014-05-20  浏览次数:20669 次

【急,在线等】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} 就可以了