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 当它独自存在于servlet中时,它甚至运行良好。我很难过。任何提示或想法都非常感激。 更新3 拧它,我只是把这个功能移到另一个班级。感谢您的帮助@ mjg123,有一个当之无愧的复选标记。 这将永远打扰我...     
已邀请:
我复制并粘贴了你的代码,它按预期编译和运行,没有异常抛出。您的代码中是否还有其他部分导致此问题? 我的完整代码是:
public class StackOverflow {

    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";
    private static final Pattern addrLong = Pattern.compile("(" + numberRegex + ")\s(.*)\s(" + typeRegex + ")\s?(" + compassRegex + ")?");

    public static void main(final String[] args) {
        final String address = "12 CLARE ST E";
        final Hashtable<String, String> result = splitAddress(address);
        System.out.println(result.get("number"));
    }

    private static Hashtable<String, String> splitAddress(final String address) {
        final Hashtable<String, String> result = new Hashtable<String, String>();

        final Matcher m = addrLong.matcher(address);
        if (m.matches()) {
            result.put("number", m.group(1));
        }
        return result;
    }
}
哪个运行正常并打印
12
作为其输出。     

要回复问题请先登录注册