应用.useDelimiter时获取异常

时间:2018-12-24 13:46:09

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

Screenshot

我有几个问题:

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

我不知道如何纠正异常。

1 个答案:

答案 0 :(得分:0)

您的代码无法正常工作的原因是,输入文件的行尾也要换行,因此也必须将其视为定界符。

执行以下操作,而不是仅使用“ =”作为分隔符:

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 = pug \r\n= eth = 22.0 =贵宾犬{{1} } rex \r\n大卫= 40.0 = ab

希望这会有所帮助。