我对 Matches 有一些奇怪的问题,希望有人能提供一些启示。
根据 Java 文档:
public boolean matches() ... 如果匹配成功,则可以通过 start、end 和 group 方法获得更多信息。
一些代码:
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,有一个当之无愧的复选标记。
这将永远困扰我...