У меня странные проблемы с матчами, в надежде, что кто-то сможет пролить свет.
Согласно документации Java:
публичные логические совпадения () ... Если
Матч успешен, тогда больше информации
можно получить через начало, конец,
и групповые методы.
Код:
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: я знаю, что соглашения об именах нарушаются. Я не писал эту часть, клянусь.
UPDATE:
Это успешно выполняется как отдельная функция.
Есть идеи, почему это может сломаться в среде котов?
Я посмотрю, смогу ли я найти что-нибудь, что может повлиять на это, но мой addrLong - моя единственная статическая переменная и больше нигде не используется.
Это сводит меня с ума. Я даже попробовал:
Pattern p = Pattern.compile("(" + numberRegex + ")\\s(.*)");
Matcher m = p.matcher(address);
if (m.matches()) {
result.put("number", m.group(1));
в моей серверной среде, и она не работает.
ОБНОВЛЕНИЕ 2
Он даже работает нормально, когда он один в сервлете. Я в тупике. Любые советы или идеи с благодарностью.
ОБНОВЛЕНИЕ 3
Винт, я просто перемещаю функцию в другой класс. Спасибо за вашу помощь @ mjg123, поставьте заслуженную галочку.
Это будет беспокоить меня вечно ...