我有一个我正在迭代的字符串数组运算符。当我找到strLine
中存在的那个时,我用空字符串替换它的第一个实例。当我到达{
时,我会收到java.util.regex.PatternSyntaxException: Illegal repetition
。
现在,我知道{
是一个特殊的java运算符,这就是它失败的原因。使用我现在的设置来逃避这个角色的最佳方法是什么?
String[] operators = {".", ",", "{", "}", "!", "++", "--", "*", "/", "%", "+", "-", "<"}
String strLine = "for (int count = input.length(); count > 0; count--) {";
strLine = strLine.trim();
for (int i = 0; i < operators.length; i++) {
if(strLine.contains(operators[i])) {
strLine = strLine.replaceFirst(operators[i]+"\\s*", "");
System.out.println("Removal of: " + operators[i]);
System.out.println("Sentence after removal: " + strLine);
}
}
答案 0 :(得分:1)
你应该能够使用java.util.regex.Pattern.quote转义特殊字符
通过更改
strLine = strLine.replaceFirst(operators[i]+"\\s*", "");
到
strLine = strLine.replaceFirst(Pattern.quote(operators[i])+"\\s*", "");
答案 1 :(得分:0)
您必须使用反斜杠转义每个正则表达式保留运算符。所以你需要放两个反斜杠(另一个是逃避反斜杠本身)。示例:“\\。”,“\\ {”