Raz*_*zvi 10 java regex java.util.scanner
如何将扫描仪的分隔符设置为; 还是新线?
我试过了:
Scanner.useDelimiter(Pattern.compile("(\n)|;"));
但它不起作用.
Pow*_*ord 16
作为一般规则,在模式中,您需要加倍\.
所以,试试吧
Scanner.useDelimiter(Pattern.compile("(\\n)|;"));`
Run Code Online (Sandbox Code Playgroud)
要么
Scanner.useDelimiter(Pattern.compile("[\\n;]"));`
Run Code Online (Sandbox Code Playgroud)
编辑:如果\r\n是问题,您可能想尝试这个:
Scanner.useDelimiter(Pattern.compile("[\\r\\n;]+"));
Run Code Online (Sandbox Code Playgroud)
它匹配的一个或多个\r,\n和;.
注意:我没试过这些.
正如您所发现的,您需要查找DOS /网络样式\r\n(CRLF)行分隔符而不是Unix样式\n(仅限LF).但如果文本包含两者呢?这种情况发生了很多; 事实上,当我查看这个页面的来源时,我看到了两种变体.
你应该养成寻找两种分隔符的习惯,以及旧的Mac风格\r(仅限CR).这是一种方法:
\r?\n|\r
Run Code Online (Sandbox Code Playgroud)
将其插入到示例代码中即可获得:
scanner.useDelimiter(";|\r?\n|\r");
Run Code Online (Sandbox Code Playgroud)
这假设您希望一次只匹配一个换行符或分号.如果你想匹配一个或多个,你可以这样做:
scanner.useDelimiter("[;\r\n]+");
Run Code Online (Sandbox Code Playgroud)
另请注意,我是如何传入正则表达式字符串而不是模式的; 所有正则表达式都会自动缓存,因此预编译正则表达式不会为您带来任何性能提升.