java - 你如何防止 scanner.next() 包含换行符?

标签 java io newline delimiter

我正在尝试使用 scanner.next() 简单地读取文本文件中的单词,分隔符等于“”,但扫描器包含带有 token 的换行符/回车符。

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

文本文件:

这是一个测试

看看这个是否有效

好的!

代码:

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);
    }

输出:

0:这个

1: 是

2:一个

3:测试

4:见

5: 如果1

6:这个,

7: 是

8:工作

好的!

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

最佳答案

documentation of Scanner说:

The default whitespace delimiter used by a scanner is as recognized by Character.isWhitespace

和链接documentation of Character.isWhitespace说:

Determines if the specified character is white space according to Java. A character is a Java whitespace character if and only if it satisfies one of the following criteria:

  • It is a Unicode space character (SPACE_SEPARATOR, LINE_SEPARATOR, or PARAGRAPH_SEPARATOR) but is not also a non-breaking space ('\u00A0', '\u2007', '\u202F').
  • It is '\t', U+0009 HORIZONTAL TABULATION.
  • It is '\n', U+000A LINE FEED.
  • It is '\u000B', U+000B VERTICAL TABULATION.
  • It is '\f', U+000C FORM FEED.
  • It is '\r', U+000D CARRIAGE RETURN.
  • It is '\u001C', U+001C FILE SEPARATOR.
  • It is '\u001D', U+001D GROUP SEPARATOR.
  • It is '\u001E', U+001E RECORD SEPARATOR.
  • It is '\u001F', U+001F UNIT SEPARATOR.

所以,不要设置任何特定的分隔符。保留默认值,换行符将像空格一样被视为分隔符,这意味着 token 将不包含换行符。

关于java - 你如何防止 scanner.next() 包含换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36669643/

相关文章:

java - 如何使用 apache commons io 复制空目录?

java - 在 Android 中使用接口(interface)回调

java - 选择一个随机加权元素,有样本,无替换

java - 写入文件 : the difference between stream and writer

java - 循环遍历 InputStream 截断数据

multithreading - 从持久性存储读取时,CPU核心是否繁忙?

Python readline 和 readlines 行为

java - 字符串新行(尝试将 java 连接到 Oracle DB)

perl - 在 shell 命令行中将两个换行符替换为一个

python 在txt文件中换行