После замены одного экземпляра ";null;"
на ";;"
обе точки с запятой уже обработаны, поэтому вторая ;
не может рассматриваться как начало другой замены для следующего вхождения ";null;"
. Шаблон не может быть снова сопоставлен до тех пор, пока не будет передан еще один «ноль», чтобы достичь следующей точки с запятой.
То, что вы можете использовать, - это шаблон, который не пытается сопоставить точки с запятой, но он должен проверить, есть ли они там. Вы можете использовать положительный взгляд назад и положительный взгляд вперед (найдите "lookahead" и "lookbehind" на связанной странице). Здесь положительный означает, что он проверяет, что шаблон lookbehind / lookahead существует, но не соответствует ему.
Позитивный вид сзади имеет формат (?<=X)
, где X
- это шаблон, чтобы посмотреть за основным шаблоном, чтобы увидеть, существует ли он. Кроме того, положительный прогноз имеет формат (?=X)
, где X
- это шаблон для просмотра перед основным шаблоном, чтобы увидеть, существует ли он.
Здесь мы ищем начало строки ^
или точку с запятой перед совпадением и конец строки $
или точку с запятой после совпадения. Затем мы просто заменяем фактическое совпадение "null"
пустой строкой.
s = s.replaceAll("(?<=^|;)null(?=$|;)", "");