У меня странные проблемы с Matches, я надеюсь, что кто-то может пролить свет.
Согласно документам Java:
public boolean matches () ... Если совпадение выполнено успешно, тогда больше информации можно получить через начало, конец, и групповые методы.
Некоторый код:
private static Hashtable<String,String> splitAddress(String address){
Hashtable<String,String> result = new Hashtable<String,String>();
Matcher m = addrLong.matcher(address);
if (m.matches()) {
result.put("number", m.group(1));
Это то, где он бросает:
java.lang.IllegalStateException: No match found
java.util.regex.Matcher.group(Matcher.java:485)
splitAddress(WebServiceHelper.java:699)
Это само по себе странно для меня. Вот еще кое-что, если это поможет:
private static final String numberRegex = "[0-9]*[a-zA-Z]?"; // 123a 123
private static final String compassRegex = "N|E|S|W|NORTH|EAST|SOUTH|WEST|NORD|EST|SUD|OUEST";
private static final String typeRegex = "STREET|ST|DRIVE|DR|AVENUE|AVE|AV|ROAD|RD|LOOP|LP|COURT|CT|CIRCLE|LANE|LN|BOULEVARD|BLVD|CRESCENT|CR";
addrLong = Pattern.compile("(" + numberRegex + ")\\s(.*)\\s(" + typeRegex + ")\\s?(" + compassRegex + ")?");
Входная строка, которую я проверял, - "12 CLARE ST E"
Спасибо!
Изменить: Ой, я вставил свое объявление addrShort вместо моего addrLong
Edit2: Я знаю, что соглашения об именах нарушаются. Клянусь, я не писал эту часть.
ОБНОВЛЕНИЕ:
Это успешно выполняется как отдельная функция.
Есть идеи, почему это может сломаться в среде Tomcat?
Я посмотрю, смогу ли я найти что-нибудь, что могло бы повлиять на это, но мой addrLong - моя единственная статическая переменная и больше нигде не используется.
Это сводит меня с ума. Я даже попробовал:
Pattern p = Pattern.compile("(" + numberRegex + ")\\s(.*)");
Matcher m = p.matcher(address);
if (m.matches()) {
result.put("number", m.group(1));
в моей серверной среде, и это не удалось.
ОБНОВЛЕНИЕ 2
Он даже работает нормально, когда он один в сервлете. Я' м в тупике. Любые намеки или идеи приветствуются.
ОБНОВЛЕНИЕ 3
К черту, я просто переношу функцию в другой класс. Спасибо за помощь @ mjg123, поставьте заслуженную галочку.
Это будет беспокоить меня вечно ...