我试图确定传递到我的 Expressions 类中的表达式是否有运算符。任何一个+-*/^
分别用于加、减、乘、除和指数。
这段代码有什么问题?
private static boolean hasOperator(String expression)
{
return expression.matches("[\+-\*/\^]+");
}
我以为我已经正确转义了特殊字符,但我不断收到错误:“非法转义字符“尝试编译时。
感谢您的帮助。
不要逃避不需要逃避的事情:
return expression.matches("[-+*/^]+");
应该可以正常工作。大多数正则表达式元字符 (.
, (
, )
, +
, *
等)在字符类中使用时会失去其特殊含义。您需要注意的是[
, -
, ^
, and ]
。对于最后三个,您可以策略性地将它们放置在 char 类中,这样它们就不会具有特殊含义:
-
^
可以放置在除左括号之后之外的任何位置:[a^]
-
-
可以放在左括号之后或右括号之前:[-a]
or [a-]
-
]
可以放在左括号之后:[]a]
但为了将来的参考,如果您需要在正则表达式字符串中包含反斜杠作为转义字符,则需要将其转义两次,例如:
"\\(.*?\\)" // match something inside parentheses
因此,要匹配字面上的反斜杠,您需要其中四个:
"hello\\\\world" // this regex matches hello\world
另一个注意事项:String.matches()
将尝试匹配entire字符串反对模式,所以除非你的字符串只包含一堆运算符,否则你需要使用类似的东西.matches(".*[-+*/^].*");
相反(或使用Matcher.find() http://download.oracle.com/javase/1.5.0/docs/api/java/util/regex/Matcher.html#find%28%29)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)