java – Matcher在匹配后抛出IllegalStateException
我对Matches有一些奇怪的问题,希望有人可以解决一些问题.
根据 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:我知道命名约定正在被打破.我发誓,我没有写那部分. 更新: 这可以作为独立函数成功执行. 任何想法为什么它会破坏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>(); final Matcher m = addrLong.matcher(address); if (m.matches()) { result.put("number",m.group(1)); } return result; } } 哪个运行正常并打印12作为其输出. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |