как посредством contains в java отличить SA-30 от SA-3 или же SA-1 от SA-1 RC

Имеем строки:

  1. 17:14:47 352765 SA-30 Запрос 'Messages' успешно обработан
  2. 20:15:31 352765 SA-3 Запрос 'Messages' успешно обработан
  3. 16:32:14 352765 SA-1 RC Запрос 'ErrorLog' успешно обработан
  4. 20:15:31 352765 SA-1 Запрос 'Messages' успешно обработан

**Как посредством if (line.contains("SA-1")) res=line; выбрать только строку 4 и не выбрать строку 3 **

Результат должен быть следующим:

res=20:15:31 352765 SA-1 Запрос 'Messages' успешно обработан

Если для 3 и 4 строки нет решения, то подскажите как быть SA-30 от SA-3 то есть 1 и 2 строкой?


Ответы (2 шт):

Автор решения: Aziz Umarov

Все просто проверяете с пробелами. Т.е чем точнее поиск тем меньше данных. Не мучайте себя. Исключайте не нужные путем добавления данных

public static void main(String[] args) throws Exception {

  String[] str =
    new String[] {
      "17:14:47 352765 SA-30 Запрос 'Messages' успешно обработан",
      "20:15:31 352765 SA-3 Запрос 'Messages' успешно обработан",
      "16:32:14 352765 SA-1 RC Запрос 'ErrorLog' успешно обработан",
      "20:15:31 352765 SA-1 Запрос 'Messages' успешно обработан"
    };

Stream.of(str).filter(item -> item.contains(" SA-3 ")).forEach(System.out::println);
// 20:15:31 352765 SA-3 Запрос 'Messages' успешно обработан
}
→ Ссылка
Автор решения: SemperAnte

Можно попробовать просто идти от большего к меньшему:

if(line.contains("SA-30"))
{
 //Найдена 1 строка
} 
else if(line.contains("SA-3"))
{
 //Найдена 2 строка
}
else if(line.contains("SA-1 RC"))
{
 //Найдена 3 строка
}
else if(line.contains("SA-1"))
{
 //Найдена 4 строка
}

→ Ссылка