Заменить неизвестное количество пробелов нулями [Regex / Java] - PullRequest
0 голосов
/ 31 октября 2018

У меня есть следующий текст:

Dorothy 123456789  0        98765Fashion 

Мне нужно заменить пробел между 0 и 98765 таким же количеством , равным 0 с , чтобы оно выглядело следующим образом:

Dorothy 123456789  0000098765Fashion 

Есть улов:

  • Точное количество пробелов между 0 и 98765 неизвестно. Их не может быть, их может быть много.
  • Начало 0 является константой, но цифры в 98765 также меняются.

То, что я имею до сих пор, заменяет только пробел между 0 и 98765 только одним 0, но оно не соответствует всем остальным пробелам нулями:

regexExpression = "(.{7}).(\\d{9})(..)0(\\s+)(\\d+)(.{7})";
replacement = "$1$2$300$5$6";
newString = oldString.replaceAll(regexExpression, replacement);

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Если это будет строка, я бы попробовал следующее:

`

String a = "Dorothy 123456789  0        98765Fashion";

char[] chars = a.toCharArray();

for(int i =0; i<chars.length;i++){

   if(chars[i]==0&&chars[i+1]==' '){
      chars[i+1]=0;
   }

}

`

0 голосов
/ 31 октября 2018

Java 9 +

Если вы используете Java 9 + , вы можете использовать Matcher::replaceAll примерно так:

newString = Pattern.compile("0(\\s*)\\d+")
        .matcher(oldString)
        .replaceAll(g -> g.group(0).replace(" ", "0")); 

Если g.group(0) перехватит все пробелы между 0 и числом, то вы можете просто заменить каждый пробел в этой группе на 0. (просто и легко).


Выходы

Dorothy 123456789  00000000098765Fashion
0 голосов
/ 31 октября 2018

Вы можете использовать регулярное выражение \G здесь:

(?<=0|\G)\h(?=\h*\d)

и замените его на:

0

В коде Java:

str = str.replaceAll("(?<=0|\\G)\\h(?=\\h*\\d)", "0");

RegEx Demo

Информация о регулярных платежах:

  • \G устанавливает позицию в конце предыдущего совпадения или в начале строки для первого совпадения
  • (?<=0|\G): убедитесь, что у нас есть ноль или конец предыдущего матча на предыдущей позиции
  • \h: сопоставление горизонтального пробела
  • (?=\h*\d): убедитесь, что у нас 0 или более пробелов, за которыми следует цифра вперед
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...