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

问题描述 投票:0回答:3

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

我在互联网上搜索试图找到这个问题的一个很好的例子,但没有找到它,所以我将其发布在这里。我找不到在此处发布的另一个类似问题。我还查看了有关扫描仪和模式的文档(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 有两个单词,并用换行符分隔。 (我知道我可以将它们分成两个单独的字符串。)

java io newline delimiter
3个回答
7
投票

扫描仪的文档说:

扫描仪使用的默认空白分隔符由

Character.isWhitespace

识别

链接的文档

Character.isWhitespace
说:

根据Java判断指定字符是否为空格。当且仅当一个字符满足以下条件之一时,它才是 Java 空白字符:

  • 它是 Unicode 空格字符(SPACE_SEPARATOR、LINE_SEPARATOR 或 PARAGRAPH_SEPARATOR),但也不是不间断空格('\u00A0'、'\u2007'、'\u202F')。
  • 它是“ ”,U+0009 水平制表。
  • 是' ', U+000A 换行。
  • 它是“\u000B”,U+000B 垂直制表。
  • 是“ ”,U+000C 换页。
  • 是' ', U+000D 回车。
  • 它是'\u001C',U+001C 文件分隔符。
  • 它是“\u001D”,U+001D 组分隔符。
  • 它是'\u001E',U+001E记录分隔符。
  • 它是'\u001F',U+001F单位分隔符。

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


1
投票

string = scanner.next();
之后替换
\n
就是

string = string.replace("\n", "");

然后打印出字符串变量.. 这应该可以解决问题


0
投票

在计算机科学中,地图先于集合。所以,我想 nextLine() 应该出现在 next() 之前。在数学中,集合是一个基本概念。但这是计算机科学。您可以通过参加 www.coursera.org 上的一些免费课程来整理您的想法。

© www.soinside.com 2019 - 2024. All rights reserved.