java 6 matcher class - PullRequest
       3

java 6 matcher class

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

У меня есть следующая строка:

TEST|A||B|C|**""**|D|""|||||\r\n
TEST|Z||V|P|**""**|Y||||||||\r\n

Мне нужно сделать содержимое между 5-м и 6-м появлением | пустым, если содержимое "". Таким образом, желаемый результат

TEST|A||B|C||D|""|||||\r\n
TEST|Z||V|P||Y||||||||\r\n

Поэтому я использую matcher / pattern и matcher.replaceFirst (), используя этот шаблон регулярного выражения:

String regexPattern = "TEST.*\\|([|\\|]*)\\|([|\\|]*)\\|([|\\|]*)\\|([|\\|]*)\\|\"\"\\|([|\\|]*)"

Хотя я хочу только "" в 5 и 6 случаях | чтобы стать ПУСТОЙ, программа заменяет все "", с которыми сталкивается, ПУСТОЙ.

Таким образом, вывод выглядит следующим образом:

TEST|A||B|C||D||||||\r\n
TEST|Z||V|P||Y||||||||\r\n

Я не уверен, что мне нужно изменить шаблон регулярных выражений, который у меня есть? ИЛИ есть ли способ сообщить классу соответствия, что после того, как он изменит первый, «не изменяет другой» в этом сопоставленном шаблоне, но изменит его в другом случае фрагмента TEST, если да, то как?

Обновление:

Понял. Чрезвычайно извините за мега путаницу. Я буду стараться изо всех сил, чтобы сделать его максимально точным / понятным.

Перефразированный вопрос:

Я хочу использовать шаблон для поиска в строке, используя классы java Pattern и matcher.

Строка состоит из двух строк с данными, разделенными | и каждая строка разделена \ r \ n \

Упрощенный пример выглядит следующим образом:

Содержимое TestString:

TEST|JUNK1|JUNK2|JUNK3|JUNK4|""|JUNK6|""|JUNK8
TEST|JUNK11|JUNK12|JUNK13|JUNK14|""|JUNK16|

Я хочу "" после JUNK4 | (содержимое между 5-м и 6-м появлением | в строке) в приведенном выше примере должно быть пустым / пустым. Я не хочу, чтобы "" в других позициях этой линии менялся. То же самое должно произойти в следующей строке.

Поэтому я использую следующий шаблон регулярных выражений в сочетании с классами Java Matcher и Pattern следующим образом:

String regexPattern = "TEST.*\\|([|\\|]*)(\"\")([|\\|]*)\\|";

Но он заменяет все вхождения "" в каждой строке, и это не соответствует моему требованию.

Я пробовал квантификатор / POSIX {1}, но тщетно думал, что это ограничит поиск первого "" в TestStr, но тщетно.

Regex с использованием {1}:

String regexPattern = "TEST.*\\|([|\\|]*)(\"\"){1}([|\\|]*)\\|";

Итак, как сделать ограничение в шаблоне, чтобы получить фрагмент строки до первого "".

1 Ответ

1 голос
/ 27 сентября 2010

Простой ответ без использования сложных регулярных выражений:

String temp[] = inputString.split("\\|");
if ("\"\"".equals(temp[5]))
{
    temp[5] = "";
    StringBuilder buf = new StringBuilder();
    for (String s : temp)
        buf.append("|").append(s);
    inputString = buf.substring(1);
}

А также обратите внимание на то, что другие говорят вам.ИСПОЛЬЗУЙТЕ СРЕДСТВО РЕДАКТИРОВАНИЯ, не публикуйте исправления в качестве ответов.

...