-1

これを手伝ってくれる人が必要です。正規表現を使用して、Dr、Rd、St などの文字を Drive Road と Street に置き換えたいのですが、どうすればよいですか? 私は非常に多くの方法を試しましたが、私の結果は正しくありません。たとえば、ユーザーが変数 vaddress: 13 にこのアドレスを指定した場合、Clinton str off allen rd queens dr. 結果は 13、クリントン ストリート オフ アレン ロード クイーンズ ドライブのはずです。

ここに私のコードのサンプルがあります:

    public void standardizeAddress(String vaddress){
        address = vaddress;//address is an instance variable
        String str1,str2;
       //Replace all instances of 'St,Rd,Dr' with 'Street,Road and Drive' Using

            String regex = "\\sSt\\s";
            Pattern pat = Pattern.compile(regex);
            Matcher match = pat.matcher(address);
            while(match.find())
             address = match.replaceAll(" Street ");
             System.out.println(address);
             str1 = address;

            regex = "\\sRd\\s";
            pat = Pattern.compile(regex);
            match = pat.matcher(str1);
            while(match.find())
            str1 = match.replaceAll(" Road ");
            System.out.println(str1);
            str2 = str1;

            regex = "\\sDr\\s";
            pat = Pattern.compile(regex);
            match = pat.matcher(str2);
            while(match.find())
            str2 = match.replaceAll(" Drive ");
            System.out.println(str2);    
        }

前もって感謝します

4

4 に答える 4

2

これはうまくいくはずです:

String str = "Dr abc Rd def St ghi";
str = str.replaceAll("(\\s+|^)Dr(\\s+|$)", "$1Drive$2");
str = str.replaceAll("(\\s+|^)Rd(\\s+|$)", "$1Road$2");
str = str.replaceAll("(\\s+|^)St(\\s+|$)", "$1Street$2");

System.out.println(str);

収量:

ドライブ abc ロード デフ ストリート ghi

このコードでは、置換する単語の前にスペースも保持する必要があります。

于 2013-02-15T09:17:26.620 に答える
1

状況が非常に単純で、シナリオが小さい場合 (複雑な正規表現は必要ない場合) は、単純にString.replaceAllまたはString.replaceを使用できると思います。

于 2013-02-15T09:19:52.433 に答える
0

Pattern と Matcher の使用法を示すだけです。いくつかの replaceAll を使用した簡単な答えが最も読みやすいと思います。

    Map<String, String> replacements = new LinkedHashMap<>(); // Keep in order
    replacements.put("Dr", "Drive");
    replacements.put("Rd", "Road");
    replacements.put("St", "Street");

    StringBuilder regex = new StringBuilder();
    for (String abbrev : replacements.keySet()) {
        regex.append(regex.length() == 0? "\\b(" : "|");
        regex.append(Pattern.quote(abbrev));
    }
    regex.append(")\\b");
    Pattern abbrevPattern = Pattern.compile(regex.toString());
    Matcher m = abbrevPattern.matcher(vaddress);

    StringBuffer result = new StringBuffer();
    while (m.find()) {
        String outwritten = replacements.get(m.group(1));
        m.appendReplacement(result, outwritten);
    }
    m.appendTail(result);
    return result.toString();
于 2013-02-15T09:31:56.860 に答える
0

Matcher を使用する場合は、次のコード例が役立ちます:)

String address = "St number 9 and St number 99 and st number 999";       
String regex = "\\bSt\\b";
Pattern pat = Pattern.compile(regex);
Matcher match = pat.matcher(address);
address = match.replaceAll("Street");
System.out.println(address);

出力結果:Street number 9 and Street number 99 and st number 999

于 2013-02-15T09:25:56.963 に答える