Я ищу сокращения состояний в строке.Вот пример входной строки:
String inputStr = 'Albany, NY + Chicago, IL and IN, NY, OH and WI';
Шаблон, который я использую для сопоставления сокращений состояний:
String patternStr = '(^|\\W|\\G)[a-zA-Z]{2}($|\\W)';
Я перебираю совпадения и удаляюальфа-символы во время цикла, но я знаю, что смогу сделать это за один проход.Вот текущий подход:
Pattern myPattern = Pattern.compile(patternStr);
Matcher myMatcher = myPattern.matcher(inputStr);
Pattern alphasOnly = Pattern.compile('[a-zA-Z]+');
String[] states = new String[]{};
while (myMatcher.find()) {
String rawMatch = inputStr.substring(myMatcher.start(),myMatcher.end());
Matcher alphaMatcher = alphasOnly.matcher(rawMatch);
while (alphaMatcher.find()) {
states.add(rawMatch.substring(alphaMatcher.start(),alphaMatcher.end()));
}
}
System.debug(states);
|DEBUG|(NY, IL, IN, NY, OH, WI)
Это работает, но многословно и, вероятно, неэффективно.Какой односторонний способ сделать это в Java / Apex?