你怎么保持scanner.next()不包括换行符?

Sam*_*uel 1 java io newline delimiter

我试图简单地使用带有分隔符等于""的scanner .next()读取文本文件中的单词,但扫描程序包含带有令牌的换行符/回车符.

我已经搜索了互联网,试图找到这个问题的一个很好的例子,但没有找到它所以我在这里发布它.我在SO上发现了另一个类似的问题.我也看了关于扫描仪和模式(文档超过http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html),但我仍然无法找到一个方法来解决这个.

文本文件:

这是一个测试

看看if1这个,是否有效

好!

码:

int i = 0;
String string;
try(Scanner scanner = new Scanner(new File(filename))) {
    scanner.useDelimiter(" ");
    while(scanner.hasNext())
    {
    string = scanner.next();
    System.out.println(i++ + ": " + string);
    }
}catch(IOException io_error) {
    System.out.println(io_error);
    }
Run Code Online (Sandbox Code Playgroud)

输出:

0:这个

1:是

2:a

3:测试

4:看

5:if1

6:这个,

7:是

8:工作

好!

如您所见,#3和#8有两个单词换行.(我知道我可以将它们分成两个单独的字符串.)

JB *_*zet 5

Scanner文档说:

扫描程序使用的默认空白分隔符可以识别 Character.isWhitespace

链接文档Character.isWhitespace说:

根据Java确定指定的字符是否为空白.当且仅当它满足以下条件之一时,字符才是Java空白字符:

  • 它是一个Unicode空格字符(SPACE_SEPARATOR,LINE_SEPARATOR或PARAGRAPH_SEPARATOR),但也不是一个不间断的空格('\ u00A0','\ u2007','\ u202F').
  • 这是'\ t',U + 0009 HORIZONTAL TABULATION.
  • 它是'\n',U + 000A LINE FEED.
  • 这是'\ u000B',U + 000B VERTICAL TABULATION.
  • 它是'\ f',U + 000C FORM FEED.
  • 这是'\ r',U + 000D CARRIAGE RETURN.
  • 它是'\ u001C',U + 001C FILE SEPARATOR.
  • 它是'\ u001D',U + 001D GROUP SEPARATOR.
  • 它是'\ u001E',U + 001E RECORD SEPARATOR.
  • 它是'\ u001F',U + 001F UNIT SEPARATOR.

所以,只是不要设置任何特定的分隔符.保持默认值,换行符将被视为分隔符,就像空格一样,这意味着令牌不会包含换行符.