Изменение части регулярного выражения в вызове replaceAll - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь отформатировать строку с помощью регулярного выражения следующим образом:

String string = "5.07+12.0+2.14";
string = string.replaceAll("\\.0[^0-9]","");

То, что я думаю, произойдет, если строка станет:

5.07+122.14 //the regex will delete the .0+ next to the 12

Как создать регулярное выражение, чтобы оно удаляло только .0, а не знак +?

Я бы предпочел сделать все в одном вызове , чтобы "заменить все"

спасибо за любые предложения

1 Ответ

0 голосов
/ 07 сентября 2018

Соответствующие символы будут заменены. Таким образом, вместо соответствия нецифровой цифре в конце вы можете использовать lookahead, который выполнит желаемую проверку, но не будет использовать никаких символов. Кроме того, сокращение для нецифровой цифры \D, что немного лучше, чем [^0-9]:

String string = "5.07+12.0+2.14";
string = string.replaceAll("\\.0(?=\\D)","");

Если вы хотите заменить все конечные нули (например, замените 5.00 на 5 вместо 50, что вам, вероятно, не нужно), затем повторите 0 или еще раз с +, чтобы обеспечить замену всех нулей после десятичной точки:

String string = "5.07+12.000+2.14";
string = string.replaceAll("\\.0+(?=\\D)","");

Если строка никогда не содержит букв или символов подчеркивания _ символов (эти и числовые символы считаются символами слова), то вы можете сделать ее еще красивее с границей слова вместо заглядывания. Граница слова, как это звучит, будет соответствовать позиции с символом слова на одной стороне и несловесным символом на другой стороне с \b:

string = string.replaceAll("\\.0+\\b","");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...