您的代码不起作用的原因是输入文件也有换行符,也必须将其视为分隔符。
不要只使用“=”作为分隔符,而是这样做:
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
希望对你有所帮助。