Java: сделайте что-нибудь, если регулярное выражение не найдено - PullRequest
0 голосов
/ 05 июля 2018

Я анализирую файлы журнала, и мне нужно сделать одну вещь, когда найдено регулярное выражение (добавить ', TRUE' к переменной, .csv, ArrayList), и что-то еще (добавить пустой слот, "," или «, _», если пустой слот не подходит), когда это регулярное выражение не найдено.

В каждом файле журнала может быть проанализировано от 1 до 200 записей, поэтому регулярное выражение может совпадать от одного до нескольких.

Я пробовал несколько вариантов, либо получал ошибку при компиляции (не нравится тестирование логического значения для строки), никаких наблюдаемых действий не происходит, или когда регулярное выражение найдено, я получаю результат, когда регулярное выражение не найдено.

Мне нужен вывод в переменной .csv или ArrayList, поэтому, если совпадение не найдено, мне нужен пустой «,», потому что вывод представляет собой предопределенную таблицу, поэтому столбцы необходимо правильно выровнять .

Комбинации, которые я пробовал:

if(!noBaseText.equals("No matching base data found"))
if(!noBaseText.equals("No matching base data found") == false)
if(noBaseText.equals("No matching base data found" != true))
if(noBaseText.isEmpty())
if(noBaseText.equals(""))
if(!noBaseText.equals(""))
if(noBaseText.equals("No matching base data found"))

'} else {' и '} else if (...) {' с указанными выше комбинациями, как в случае вложенного if / else (как в коде ниже), так и в виде 'else' в 'if (baseMatcher) .find ()) 'возвращает идентичные результаты.

Фрагмент кода:

Pattern noBase = Pattern.compile("(?<noBase>No matching base data found)");
try(corrReader)
            {
                while ((corrLine = corrReader.readLine())!=null)
                {
                    corrText = corrLine.trim();
                    Matcher baseMatcher = noBase.matcher(corrText);
                    if (baseMatcher.find()) 
                    {
                        String noBaseText = baseMatcher.group("noBase");
                        if(!noBaseText.equals("No matching base data found"))
                        {
                            corrOutput += ",";
                        } else if(noBaseText.equals("No matching base data found")) {
                            corrOutput += ",TRUE";
                        } //end else
                    } //end if(baseMatcher)
                } //end while(corrLine)
            } //end try(corrReader)

Вывод, который я получаю при совпадении:

AA-123-12345-SP1.SSF, TRUE,

Вывод, который я получаю, когда нет совпадения:

AA-123-12345-SP2.SSF, 100100, guug04314054.zip,

Вывод, который мне нужно получить, когда нет совпадения:

AA-123-12345-SP2.SSF ,, 100100, guug04314054.zip

Когда регулярное выражение совпадает и возвращается ', TRUE', следующих записей не будет; когда регулярное выражение не совпадает и возвращается ',', будут дополнительные записи.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Я не уверен, правильно ли я понял, но .. если вы хотите проверить, пуст ли шаблон, выполните следующее:

if(noBase.pattern().isEmpty()) {
// do your stuff
}
0 голосов
/ 05 июля 2018

Для этого можно использовать троичный оператор:

boolean found = false;
while ((corrLine = corrReader.readLine())!=null)
{
  ...
      String noBaseText = baseMatcher.group("noBase");
      found |= noBaseText.equals("No matching base data found");
  ...
}

corrOutput += found ? "TRUE," :  ",";

Если значение found равно true, вы получите "TRUE," в противном случае ",".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...