我遇到了一些與Matches有關的奇怪問題,希望有人可以說出一些看法。
根據Java文檔:Matcher在匹配後拋出IllegalStateException
公共布爾匹配()...如果 匹配成功則可以通過起點,終點, 和組的方法來獲得更多的信息 。
一些代碼:
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克萊爾ST E」
謝謝!
編輯:哎呀,我貼我的addrShort聲明,而不是我addrLong
EDIT2:我知道命名規則正在被打破。我沒有寫那部分,我發誓。
UPDATE:
這成功執行,作爲一個獨立的功能。
任何想法爲什麼它會在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,有一個當之無愧的複選標記。
這將永遠打擾我......
我也一樣。當我調試並逐步完成工作。當我運行它時,它不會。如果(matcher.matches()&& matcher.groupCount()> 0) 可以使其工作 – 2013-03-13 21:34:41