首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Scanner问题

Java Scanner问题
EN

Stack Overflow用户
提问于 2009-12-31 01:55:30
回答 3查看 19.9K关注 0票数 10

如何将扫描器的分隔符设置为;或换行?

我尝试过:Scanner.useDelimiter(Pattern.compile("(\n)|;"));,但它不起作用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-31 01:59:06

作为一般规则,在模式中,您需要将\加倍。

所以,试一下

代码语言:javascript
复制
Scanner.useDelimiter(Pattern.compile("(\\n)|;"));`

代码语言:javascript
复制
Scanner.useDelimiter(Pattern.compile("[\\n;]"));`

编辑:如果\r\n是问题所在,您可能想尝试这样做:

代码语言:javascript
复制
Scanner.useDelimiter(Pattern.compile("[\\r\\n;]+"));

它与\r\n;中的一个或多个匹配。

注意:我还没有尝试过这些。

票数 16
EN

Stack Overflow用户

发布于 2009-12-31 03:55:13

正如您已经发现的,您需要寻找DOS/网络风格的\r\n (CRLF)行分隔符,而不是Unix风格的\n (仅限LF)。但是,如果文本同时包含这两个内容呢?这种情况经常发生;事实上,当我查看这个页面的源代码时,我看到了这两种变体。

你应该养成同时寻找两种分隔符的习惯,以及旧的Mac风格的\r (仅限CR)。这里有一种方法可以做到:

代码语言:javascript
复制
\r?\n|\r

将其插入到您的示例代码中,您将得到:

代码语言:javascript
复制
scanner.useDelimiter(";|\r?\n|\r");

这是假设您希望一次只匹配一个换行符或分号。如果你想匹配一个或多个,你可以这样做:

代码语言:javascript
复制
scanner.useDelimiter("[;\r\n]+");

还要注意,我是如何传入正则表达式字符串而不是模式的;所有的正则表达式都会自动缓存,因此预编译正则表达式不会给您带来任何性能提升。

票数 9
EN

Stack Overflow用户

发布于 2009-12-31 02:29:08

查看OP的注释,它看起来像是一个不同的行尾(\r\n或CRLF)是问题所在。

这是我的答案,它可以处理任意格式的多个分号和行尾(可能需要也可能不需要)

代码语言:javascript
复制
Scanner.useDelimiter(Pattern.compile("([\n;]|(\r\n))+"));

例如,如下所示的输入文件:

代码语言:javascript
复制
1


2;3;;4
5

会导致1,2,3,4,5

我尝试了normal \n和\n -在我的例子中都有效,但我同意如果你需要一个正常的反斜杠,你会想要加倍,因为它是一个转义字符。碰巧在这种情况下,"\n“变成了所需的字符,不管有没有额外的”\“

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1981497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档