Matcher выбрасывает IllegalStateException после совпадений

У меня странные проблемы с 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, поставьте заслуженную галочку.

Это будет беспокоить меня вечно ...

7
задан BalusC 7 March 2011 в 03:23
поделиться