2016-11-08 3 views
0

У меня есть String и List<String>. Я хочу извлечь из String содержимое моего List<String, включая два символа до и после.Извлечение специфически согласованных подстрок из строки

Я рассмотрел примеры от StackOverflow. Нет разделителя, нет демаркации, указывающей, что совпадение обозначается в любой форме. Я попросил и рассмотрел ответ, используя RegEx, и считаю, что это может быть способ сделать это, но как мой вопрос.

Если у меня есть String toParse = "Parse this to grab the &@[email protected]& variable";, а мой List<String> содержит ClaimNumber, есть объектно-ориентированное решение?

+0

Похоже, что регулярное выражение, которое вы хотите, просто '(..ClaimNumber ..)' Или, возможно, '(.?.? ClaimNumber.?.?)', Чтобы ловить случаи с 0 или 1 ведущими/завершающими символами. – CollinD

+0

@CollinD Да, это было бы правильно. Переменная 'ClaimNumber' содержится в моем« List », включая два символа до и после. – Mushy

ответ

1

Следующий метод будет делать это, следуя suggestion by CollinD, с добавлением правильно процитировать значения динамического поиска:

private static List<String> extract(String input, List<String> keywords) { 
    StringJoiner regex = new StringJoiner("|"); 
    for (String keyword : keywords) 
     regex.add(".." + Pattern.quote(keyword) + ".."); 
    List<String> result = new ArrayList<>(); 
    for (Matcher m = Pattern.compile(regex.toString()).matcher(input); m.find();) 
     result.add(m.group()); 
    return result; 
} 

Тестовые

System.out.println(extract("Parse this to grab the &@[email protected]& variable", 
          Arrays.asList("ClaimNumber"))); 
System.out.println(extract("The quick brown fox jumps over the lazy dog", 
          Arrays.asList("fox", "i"))); 

Выход

[&@[email protected]&] 
[quick, n fox j] 
Смежные вопросы