誰かが光を当てることができることを願って、私はマッチでいくつかの奇妙な問題を抱えています.
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」です
ありがとう!
編集:おっと、addrLongの代わりにaddrShort宣言を貼り付けました
Edit2: 命名規則が破られていることは知っています。私はその部分を書いていません、誓います。
アップデート:
これは、スタンドアロン関数として正常に実行されます。
Tomcat環境で壊れる理由はありますか?
これに影響を与える可能性のあるものを見つけることができるかどうかを確認しますが、addrLong は唯一の静的変数であり、他の場所では使用されていません。
これは私を夢中にさせています。私も試しました:
Pattern p = Pattern.compile("(" + numberRegex + ")\\s(.*)");
Matcher m = p.matcher(address);
if (m.matches()) {
result.put("number", m.group(1));
私のサーバー環境では失敗します。
更新 2
サーブレットで単独の場合でも問題なく動作します。私は困惑しています。ヒントやアイデアは大歓迎です。
更新 3
くそったれ、関数を別のクラスに移動しただけです。@mjg123 さん、ご協力ありがとうございます。当然のチェック マークを付けてください。
これは永遠に私を悩ませます...