Проблема с String :: replaceFirst () при использовании с "*"? - PullRequest
1 голос
/ 20 июня 2011
private String unusedDigits = new String("0123456789*#");
unusedDigits = unusedDigits.replaceFirst("1", "");
//...
unusedDigits = unusedDigits.replaceFirst("*", ""); // <--- problem

Я новичок в Java.Почему я сталкиваюсь с проблемой при использовании replaceFirst() с "*"?Это идет в некоторый другой поток кода (который связан с некоторым synchronized).Если я прокомментирую это утверждение, то все будет хорошо!

Ответы [ 5 ]

2 голосов
/ 20 июня 2011

Вы должны экранировать символ *, так как это специальный символ регулярного выражения:

unusedDigits = unusedDigits.replaceFirst("\\*", "");
2 голосов
/ 20 июня 2011

In replaceFirst(), первый параметр - регулярное выражение.Вы можете использовать Pattern.quote("*") вместо:

unusedDigits = unusedDigits.replaceFirst(Pattern.quote("*"), "");
1 голос
/ 20 июня 2011

Аргумент replaceFirst является регулярным выражением, и * имеет определенное значение в регулярном выражении, поэтому для исключения части регулярного выражения измените на

unusedDigits = unusedDigits.replaceFirst("\\*", "");
1 голос
/ 20 июня 2011

replaceFirst принимает регулярное выражение в качестве первого аргумента. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *, Потому что * это специальный символ

Попробуйте это:

unusedDigits = unusedDigits.replaceFirst("\\*", "");
1 голос
/ 20 июня 2011

replaceFirst требует регулярного выражения в качестве аргумента. '*' - это специальный символ в регулярном выражении, поэтому вы должны использовать

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

чтобы заменить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...