2015-11-22 73 views
0

我尝试使用一系列分隔符作为输入。这是一个功课。他们说我们也应该使用反斜杠()。如果我像这样使用它(它在最后):Java扫描器反斜线分隔符

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

它不起作用。它说不支持的转义序列。如果我添加另一个反斜杠,它表示非法行结束在字符串文字。如果我添加另一个,它将转义为双反斜杠,这不是我所需要的。

我无法找到任何解决方案,这就是为什么我问。我已经完成作业,并使用Scanner,现在改变它不是解决方案(重新实现很多)。

谢谢。

+0

尝试像'[ -^\\ [\\] _ ,.#%&]' –

+0

@AvinashRaj like,使用它作为正则表达式,而不是字符串? – Matei

+0

你在编译或运行时有错误吗? – Abdelhak

回答

1

你应该在年底使用四个反斜杠,如:

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

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

这背后的原因是你的字符串被去掉两次。一旦编译时,就像Java语言中的每一个其他字符串一样,并且编译正则表达式。这意味着,在第一步之后它会被转义一次,所以正则表达式编译器会得到两个反斜杠\\。正则表达式编译器也会避免这种情况(就像\r),并且会匹配单个\字符。

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

+0

是的,但我不明白为什么我必须使用四个反斜杠。如果是这样,你怎么逃避两个反斜杠? :)) – Matei

+0

我尽了最大努力,通过修改我的答案来回答你的问题:) –

+0

谢谢!我做的。 :) – Matei