【问题标题】:Getting exceptions when apply .useDelimiter应用 .useDelimiter 时获取异常
【发布时间】:2018-12-24 13:46:09
【问题描述】:

Screenshot

我有几个问题:

  1. 文件的内容没有完全显示,只有 第一行和第二部分。
  2. 我尝试替换函数中的参数.useDelmeter() 从 "=" 到 ", | \n" 。我得到了文件的所有内容,但是 异常不会丢失。
  3. 我从 throwExceptions 更改为 try-catch,但结果仍然存在 一样的

我不明白如何纠正异常。

【问题讨论】:

  • 您好,欢迎您。代码是文本。请照此张贴。
  • 对不起,这是我的第一篇文章)

标签: java file exception input java.util.scanner


【解决方案1】:

您的代码不起作用的原因是输入文件也有换行符,也必须将其视为分隔符。

不要只使用“=”作为分隔符,而是这样做:

Scanner sc = new Scanner(new File("Phase_1.txt")).useDelimiter("[=\\r\\n]+");

说明:

useDelimiter() 也接受正则表达式。 [=\\r\\n]+ 是一个正则表达式。

+:加号表示前面元素出现一次或多次。例如,ab+c 匹配“abc”、“abbc”、“abbbc”等,但不匹配“ac”。

[]:括号表达式。匹配括号内的单个字符。例如,[abc] 匹配“a”、“b”或“c”。

来源:https://en.wikipedia.org/wiki/Regular_expression

行尾实际上取决于操作系统。对于 Windows,它是 \r\n。对于 Unix,它是 \n

添加两个\\ 以转义\。阅读有关转义序列的更多信息:https://docs.oracle.com/javase/tutorial/java/data/characters.html

所以,[=\\r\\n]+ 是指如果=\r\n 出现多次,则将其视为一个分隔符。因此,以下将被视为一个分隔符:

=, \r, \n, =\r, =\r\r, =\r\n, ==, \r\n, and so on.

其实,在你的情况下,文件是这样的:

muffin=bobby=25.0=pug\r\ntiny=eth=22.0=poodle\r\nrex=david=40.0=ab

通过提及上述分隔符正则表达式,Scanner 会将以下内容视为分隔符。

松饼=巴比= 25.0 =哈巴狗\r\n微小= ETH = 22.0 =贵宾犬\r\n雷克斯=大卫= 40.0 = AB

希望对你有所帮助。

【讨论】:

  • 我是编程新手,有些东西不懂。您在括号 ("[=\\r\\n]+") 中使用的字符是什么?我不太明白。它叫什么我想了解它。
  • @MykhailoVasylenko 查看解释。我已经更新了我的答案。
  • 你对我帮助很大。谢谢
  • @MykhailoVasylenko 如果您觉得这个答案确实解决了您的问题,请接受它作为帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
相关资源
最近更新 更多