我有几个问题:
我不知道如何纠正异常。
答案 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
希望这会有所帮助。