【问题标题】:Java scanner reads \n in strings correctly, but not when scanning through files?Java扫描程序正确读取字符串中的\ n,但在扫描文件时不正确?
【发布时间】:2020-04-29 08:17:54
【问题描述】:

我正在编写一个从输入文本文件中获取行的程序。 它应该是由换行符分隔的单行上的一组字符串。因此,我的输入文件如下所示:

0110\n011\n0111\n100001

但是,当我打印出每一行时,它会输出为一个完整的字符串,包括换行符 - '0110\n011\n0111\n100001'

这是我的代码 - 当它是静态字符串时它适用于 Scanner,但当它来自文件时则不行。

File input = new File(input.txt);
Scanner scanner = new Scanner(input);

while (scanner.hasNextLine()) {
    System.out.println(scanner.nextLine());
}

当我将扫描仪更改为读取 String s 时,例如 Scannerscanner = new Scanner(s) for a String s = "0110\n011\n0111\n100001",它可以正常工作并打印出 4 行,这意味着它识别 \n 字符,如下所示:

String s = "0110\n011\n0111\n100001";
Scanner scanner = new Scanner(s);

while (scanner.hasNextLine()) {
    System.out.println(scanner.nextLine());
}

唯一阻碍我的是我们必须用\n 分隔输入文件字符串。这是我们项目的要求。

知道为什么会这样吗?我的文本文件错了吗,有没有办法将其拆分为\n? Scanner 读取文件中的行与静态字符串不同吗?我应该切换到 BufferedReader 吗?我无法解决这个问题。我阅读了一些论坛和手册,但找不到任何内容。如果我可以做任何事情或提供其他任何东西,请告诉我。

【问题讨论】:

  • 不要贴代码图片,直接放在问题里就行了。
  • 在文本文件中\n 是两个字符:\n,而不是一个换行字符,这是Scanner 在您调用nextLine() 时所寻找的.在 Java 字符串中,\n 是用于换行符的 Java 字符串文字转义序列,由 Java 编译器解析。从文本文件中删除 \n 并简单地将 4 个值写入 4 行。
  • @Amongalen 谢谢,我是新来的,感谢您的指导!
  • @Andreas 啊,这是有道理的。谢谢!不幸的是,我们的项目要求我们在字符串之间使用 \n...所以看起来我可能只是在每次有 \n 时将字符串分开。
  • @jarticus 我相信你误解了分配,他们确实需要换行符,而不是文本文件中的 \ + n 对。

标签: java string java.util.scanner newline


【解决方案1】:

\n 是一个换行符,当它在一个字符串中时被解释为这样,但在你的文件中你应该只按回车键,这将为你创建一个新行,扫描仪将正确读取所有内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多