你如何防止 scanner.next() 包含换行符?
How do you keep scanner.next() from including newline?
我正在尝试使用 scanner.next() 和分隔符等于 " " 来简单地读取文本文件中的单词,但扫描器包含 newline/carriage return 和令牌。
我已经在互联网上搜索过,试图找到这个问题的一个很好的例子,但没有找到,所以我把它贴在这里。我在 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: if1
6:这个,
7: 是
8:工作
好的!
如您所见,#3 和#8 有两个单词,用换行符分隔。 (我知道我可以将它们分成两个单独的字符串。)
string = scanner.next();
后替换\n
即
string = string.replace("\n", "");
然后打印出字符串变量..
这应该可以解决问题
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.
所以,不要设置任何特定的分隔符。保持默认,换行符将像空格一样被视为分隔符,这意味着令牌将不包含换行符。
我正在尝试使用 scanner.next() 和分隔符等于 " " 来简单地读取文本文件中的单词,但扫描器包含 newline/carriage return 和令牌。
我已经在互联网上搜索过,试图找到这个问题的一个很好的例子,但没有找到,所以我把它贴在这里。我在 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: if1
6:这个,
7: 是
8:工作
好的!
如您所见,#3 和#8 有两个单词,用换行符分隔。 (我知道我可以将它们分成两个单独的字符串。)
string = scanner.next();
后替换\n
即
string = string.replace("\n", "");
然后打印出字符串变量.. 这应该可以解决问题
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.
所以,不要设置任何特定的分隔符。保持默认,换行符将像空格一样被视为分隔符,这意味着令牌将不包含换行符。