Java Scanner反斜杠分隔符

时间:2015-11-22 10:59:37

标签: java regex

我尝试使用一系列分隔符作为输入。这是一个家庭作业。他们说我们也应该使用反斜杠()。如果我像这样使用它(它在最后):

scanner.useDelimiter("\\;|\\:|\\?|\\~|/|\\.|,|\\<|\\>|\\`|\\[|\\]|\\{|\\}|\\(|\\)|\\!|\\@|\\#|\\$|\\%|\\^|\\&|\\-|\\_|\\+|\\'|\\=|\\*|\"|\\||\n|\t|\r|\\");

它不会起作用。它表示不支持的转义序列。如果我添加另一个反斜杠,则表示非法行以字符串文字结尾。如果我添加另一个它将逃避双反斜杠,这不是我需要的。

我找不到任何解决方案,这就是我要问的原因。我已经完成了作业,我使用了Scanner,现在正在改变它,它不是一个解决方案(重新实现很多)。

谢谢。

2 个答案:

答案 0 :(得分:1)

最后应该使用四个反斜杠,例如:

scanner.useDelimiter("\\;|\\:| ... |\r|\\\\");

这是它应该工作的方式。你说如果你尝试过它会匹配双反斜杠。你试过吗?如果你这样做了,它仍然匹配双反斜杠,我怀疑你的输入在某个地方也被转义了。 (也许它是代码中某处的字符串文字?)

这背后的原因是你的字符串被解除转发两次。一旦在编译时就像Java语言中的每个其他字符串文字一样,并且一旦编译正则表达式。这意味着,在第一步之后它被转义一次,因此正则表达式编译器得到两个反斜杠\\。正则表达式编译器也将对此进行去除(就像\r),并且将匹配单个\字符。

如果您希望以这种方式匹配两个反斜杠,则必须在文字中使用八个反斜杠(\\\\\\\\\\\\{2})。是的,非常难看。

答案 1 :(得分:0)

我认为你以错误的方式使用分隔符。

有一个相关主题。

先检查

How do I use a delimiter in Java Scanner?