nextLine()方法的工作原理

时间:2014-04-05 22:04:47

标签: java java.util.scanner

考虑代码:

import java.util.*;

public class TestClass
{
  public static void main(String[] args)
  {
      Scanner input= new Scanner ("34\n567");

      while(input.hasNext())
      {
          System.out.println(input.nextLine());
      }

      input.close();
  }
}

我得到的输出:

34
567

当我尝试按nextLine()读取字符串时,它不应该像这样读取它,因为它必须仅在行分隔符处终止,并且\n不是Java中的行分隔符。

那么这是怎么发生的?

2 个答案:

答案 0 :(得分:1)

试试这个

    String s = "a\r\nb";
    for (String str : s.split(System.getProperty("line.separator"))) {
        System.out.println(str);
    }
    System.out.println("Length:"+s.split(System.getProperty("line.separator")).length);

\r\n代表新行。

输出

 a
 b
 Length:2

答案 1 :(得分:0)

nextLine()基于正则表达式" \ r \ n | [\ n \ r \ u \ u2028 \ u2029 \ u0085]"。这接受了java支持的平台的任何换行符,并且不限于此实际运行的jvm实例的平台。事实上,java中用于检测换行符的大多数方法都是这样工作的。因此,确定换行符应如何定义并不正确。