2012-12-06 56 views
0

我有我正在迭代的操作符的字符串数组。当我找到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

为什么不使用'replace'而不是'replaceFirst'? –

+0

我可以有多个要替换的东西。我还没有正常工作,但如果在完成循环时还有一些内容,我将不得不循环操作多次。 – joshft91

回答

1

你应该能够逃脱使用java.util.regex.Pattern.quote

特殊字符通过改变

strLine = strLine.replaceFirst(operators[i]+"\\s*", ""); 

strLine = strLine.replaceFirst(Pattern.quote(operators[i])+"\\s*", ""); 
+0

似乎要做的伎俩。谢谢。 – joshft91

0

你必须逃脱每个正则表达式保留一个反斜杠的运算符。所以你需要放两个反斜杠(另一个是避免反斜杠本身)。例如:“\\。”,“\\ {”