读取文本文件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

解决方案 »

  1.   

    这个问题很简单。
    你的问题在于scanner.hasNext(),
    email [email protected]
    property Housename Testing Two
    phone 22222222

    这中间是有一个空行,但是它毕竟是存在的一行,因此scanner.hasNext()还是为true。
    scanner.hasNext()只有到了最后一行才为false。解决方案:
    scanner.next().matches("\\s*")希望对你有用!
      

  2.   

    scanner.next().matches("\\s*")
    是说明这一行为空,或者有很多空格,总之没有内容!
      

  3.   

    非常感谢你的回答。我改为:while(scanner.hasNext()) {
    if(scanner.next().matches("\\s*")) {
    System.out.println("开始于一条新纪录:") ;
    System.out.println(scanner.next()) ;
    }
    }仍然不是满意的结果。
      

  4.   

    没有任何信息。估计是scanner.next()自动去掉了\r\n
      

  5.   


    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中去
    }
    }
      

  6.   

    很简单,正则写错了。Scanner scanner = new Scanner(new FileReader("test.txt")).useDelimiter("\\n{2}");
    while(scanner.hasNext()) {
      System.out.println("开始于一条新纪录:" + scanner.next()) ;
    }把\\r\\n 改为\\n{2} 就可以了