String :: replaceFirst()与“*”一起使用时出现问题?

时间:2011-06-20 07:01:36

标签: java string

private String unusedDigits = new String("0123456789*#");
unusedDigits = unusedDigits.replaceFirst("1", "");
//...
unusedDigits = unusedDigits.replaceFirst("*", ""); // <--- problem

是Java初学者。将replaceFirst()"*"一起使用时,为什么会遇到问题?它涉及一些不同的代码流(与某些synchronized相关)。如果我评论那个陈述,那么事情就好了!

5 个答案:

答案 0 :(得分:2)

你应该转义*字符,因为它是一个特殊的正则表达式字符:

unusedDigits = unusedDigits.replaceFirst("\\*", "");

答案 1 :(得分:2)

replaceFirst()中,第一个参数是正则表达式。您可以改为使用Pattern.quote("*")

unusedDigits = unusedDigits.replaceFirst(Pattern.quote("*"), "");

答案 2 :(得分:1)

replaceFirst需要正则表达式作为参数。 '*'是正则表达式中的特殊字符,因此您应该使用

unusedDigits = unusedDigits.replaceFirst("\\*", ""); 

替换它。

答案 3 :(得分:1)

replaceFirst采用正则表达式作为它的第一个参数。由于*是一个特殊角色,你需要逃脱它。

试试这个:

unusedDigits = unusedDigits.replaceFirst("\\*", "");

答案 4 :(得分:1)

replaceFirst参数是一个正则表达式,并且*在正则表达式中具有特定含义,因此要将正则表达式部分转换为

unusedDigits = unusedDigits.replaceFirst("\\*", "");