поиск регулярных выражений Java заменяет проблему - PullRequest
1 голос
/ 24 сентября 2010

У меня есть строка, которая содержит три вхождения слова «ТЕСТ».Каждое из этих слов сопровождается ^, и мне нужно проверить, является ли содержимое между 2 и 3 вхождением ^ пустым, если это пустой / пустой поиск, чтобы узнать, является ли содержимое между 5-м и 6-м вхождением ^""

Если это "", то замените его на пустое / пустое

Мне нужно повторять эту логическую проверку всякий раз, когда найдено слово TEST.

Пример:

Существующая строка:

aaaa^
TEST^x^^y^z^""^cccc^bbb^
bbbb^
TEST^p^^q^r^""^lll^mmm^
TEST^P^X^q^n^""^hhh^ttt^

Ожидаемая строка:

aaaa^
TEST^x^^y^z^^cccc^bbb^
bbbb^
TEST^p^^q^r^^lll^mmm^
TEST^NOT EMPTY THUS IGNORE^X^q^n^""^hhh^ttt^

Как мне это сделать?Любая помощь высоко ценится.

Ответы [ 3 ]

0 голосов
/ 24 сентября 2010

^ - это разделитель, поэтому вы можете разбить строку на токены:

String[] tokens = text.split("\\^", -1);

Затем выполнить поиск в этом массиве токенов, ища TEST, применяя любую необходимую логику, обновляя токеныпри необходимости.

Наконец, выведите обновленный список токенов, разделенный ^:

for (int i=0; i<tokens.length; i++) {
    if (i > 0) {
        System.out.print("^");
    }
    System.out.print(tokens[i]);
}
System.out.println();

При этом алгоритм, который вы реализуете, будет намного понятнее.

0 голосов
/ 24 сентября 2010

Тим ответит почти правильно.Однако может быть случай, когда после "" нет 6-го ^, но есть какой-то другой символ.Коррекция

String resultString = subjectString.replaceAll("(TEST\\^[^^]*\\^\\^[^^]*\\^[^^]*\\^)\"\"\\^", "$1^");
0 голосов
/ 24 сентября 2010
String resultString = subjectString.replaceAll("(TEST\\^[^^]*\\^\\^[^^]*\\^[^^]*\\^)\"\"\^", "$1");

Объяснение:

(       # start capturing group
 TEST   # match TEST
 \^     # match ^ (no. 1)
 [^^]*  # match 0 or more non-^ characters
 \^\^   # match ^^ (no. 2 and 3)
 [^^]*  # match 0 or more non-^ characters
 \^     # match ^ (no. 4)
 [^^]*  # match 0 or more non-^ characters
 \^     # match ^ (no. 5)
)       # end capturing group
""      # match ""
\^      # match ^ (no. 6)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...