如何将扫描器的分隔符设置为;或换行?
我尝试过:Scanner.useDelimiter(Pattern.compile("(\n)|;"));,但它不起作用。
发布于 2009-12-31 01:59:06
作为一般规则,在模式中,您需要将\加倍。
所以,试一下
Scanner.useDelimiter(Pattern.compile("(\\n)|;"));`或
Scanner.useDelimiter(Pattern.compile("[\\n;]"));`编辑:如果\r\n是问题所在,您可能想尝试这样做:
Scanner.useDelimiter(Pattern.compile("[\\r\\n;]+"));它与\r、\n和;中的一个或多个匹配。
注意:我还没有尝试过这些。
发布于 2009-12-31 03:55:13
正如您已经发现的,您需要寻找DOS/网络风格的\r\n (CRLF)行分隔符,而不是Unix风格的\n (仅限LF)。但是,如果文本同时包含这两个内容呢?这种情况经常发生;事实上,当我查看这个页面的源代码时,我看到了这两种变体。
你应该养成同时寻找两种分隔符的习惯,以及旧的Mac风格的\r (仅限CR)。这里有一种方法可以做到:
\r?\n|\r将其插入到您的示例代码中,您将得到:
scanner.useDelimiter(";|\r?\n|\r");这是假设您希望一次只匹配一个换行符或分号。如果你想匹配一个或多个,你可以这样做:
scanner.useDelimiter("[;\r\n]+");还要注意,我是如何传入正则表达式字符串而不是模式的;所有的正则表达式都会自动缓存,因此预编译正则表达式不会给您带来任何性能提升。
发布于 2009-12-31 02:29:08
查看OP的注释,它看起来像是一个不同的行尾(\r\n或CRLF)是问题所在。
这是我的答案,它可以处理任意格式的多个分号和行尾(可能需要也可能不需要)
Scanner.useDelimiter(Pattern.compile("([\n;]|(\r\n))+"));例如,如下所示的输入文件:
1
2;3;;4
5会导致1,2,3,4,5
我尝试了normal \n和\n -在我的例子中都有效,但我同意如果你需要一个正常的反斜杠,你会想要加倍,因为它是一个转义字符。碰巧在这种情况下,"\n“变成了所需的字符,不管有没有额外的”\“
https://stackoverflow.com/questions/1981497
复制相似问题