Как вывести коды стран после нахождения их в тексте

Не могу понять , как реализовать поиск кодов стран "RU", "US", "AU" и тд.. в тексте. Есть List<> с кодами и названия стран. Далее , мне нужно найти в тексте эти коды и отобразить полное название страны.

Тут указан метод с кодами и названиями стран:

  List<Countries> contextLoads() {
        
        String[] countries = Locale.getISOCountries();
                 
         var arr = new ArrayList<Countries>(countries.length);
            
                for(String o : countries) {
            
            arr.add(new Countries(o.toUpperCase(), new Locale("", o).getDisplayCountry()));                     
        }       
        return Collections.synchronizedList(arr);
}

А в этом методе , необходимо выполнить поиск в тексте, тут присутствуют ошибки, хочу понять , как алгоритм построить , методы не знаю всех :

 void contextShow(String text) {
        List<Countries> m=  contextLoads();
        var list = new ArrayList<String>();
        String[] listName = m.forEach(x -> System.out.println( x.getName())); - тут ошибка
      for(Countries c : m) {
          list.add(c.getCode());
            }
    
        String reg =String.format("^|[ (])(%s)($|[\\s.!?,)])", list);
        Pattern p = Pattern.compile(reg);
        Matcher mat = p.matcher(text);
                
        Set<String> countries =new HashSet<>();

        while (mat.find()) {
                        
            countries.add(listName.contains(mat.group())); -тут ошибка 
            }
    
}

Прошу помогите. Хотел в добавок использовать лямды , ну что то не получилось.


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

Автор решения: tym32167

Для поиска подстроки есть метод Substring

var countries = new Dictionary<string, string>() {
    {"RU", "Россия"}, 
    {"US", "США"}, 
    {"UK", "Англия"}, 
};

var texts = new[] {
    " ...//какой то текст( if== \"RU\" ) ...//какой то текст( if== \"US\" )",
    " ...//какой то текст( if== \"UK\" ) ...//какой то текст( if== \"US\" )",
    " ...//какой то текст( if== \"RU\" ) ...//какой то текст( if== \"UK\" )",
};

foreach(var txt in texts)
{
    var presents = countries.Where(x => txt.Contains($"\"{x.Key}\""));
    Console.WriteLine($"В тексте {txt} найдены страны {string.Join(", ", presents.Select(z=>z.Value))}");
}

Вывод

В тексте  ...//какой то текст( if== "RU" ) ...//какой то текст( if== "US" ) найдены страны Россия, США
В тексте  ...//какой то текст( if== "UK" ) ...//какой то текст( if== "US" ) найдены страны США, Англия
В тексте  ...//какой то текст( if== "RU" ) ...//какой то текст( if== "UK" ) найдены страны Россия, Англия
→ Ссылка