0

メールを抽出し、パターン (EMAIL_PATTERN) を使用してスペースに置き換えようとしています。以下を実行すると、ドキュメント全体が渡されても出力は生成されません。パターンはリージョン全体のみに一致します。つまり、電子メールのみを渡すと、電子メールが一致し、スペースに置き換えられます。ただし、次の方法の目的は電子メールを見つけることであり、以前の手動の抽出は必要ありません。tempString の email を差し替えた後、次のパターンに使用したいと思います。使用したいパターンを 1 つのメソッドで結合する必要がありますか、それとも別のメソッドに配置する必要がありますか? 以下は、私が今持っているコードです。また、他のパターンもありますが、私の方法が正しく機能していないため、まだ投稿していません。

private static final String EMAIL_PATTERN = "[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})";
public static void main (String[] args) {
//Document takes in a ID, student information(which includes email, address, phone, name),   school, and text   
Document r = new Document("", "FirstName LastName, Address, example@email.com,    phoneNumber", "School", "experience", "text");
            personalEmailZone(r);

 }
public static Document personalEmailZone(Document doc){
    //tempString is the personal information section of a resume
    String tempPI = doc.tempString();
    if(doc.tempString().matches(EMAIL_PATTERN) == true){
        //Pattern pattern = Pattern.compile("");
        Pattern pattern = Pattern.compile(EMAIL_PATTERN);
        Matcher matcher = pattern.matcher(tempPI);
        String emailTemp = "";
        if(matcher.find()){
            emailTemp = matcher.group();
            System.out.println(emailTemp);
            //PI.replace(emailTemp, "");
            System.out.println(emailTemp.replace(emailTemp, ""));
            tempPI = tempPI.replace(emailTemp, "");
            System.out.println(tempPI);
        }
    }
    return doc;
}
4

2 に答える 2

0

パターンをさまざまなメソッドに配置して、テキスト パターンの使用法に合わせて変更された文字列を返すことができます。例えば

String tempPI = doc.tempString();
tempPI = applyPattern1(tempPI);
tempPI = applyPattern2(tempPI)
tempPI = applyPattern3(tempPI);

のため、コードには出力が表示されませんdoc.tempString().matches(EMAIL_PATTERN) == true。文字列全体が電子メールであると想定されているため、ここでは必要ないかもしれません。

于 2012-08-07T16:50:40.400 に答える
0

いくつかの問題があります。

public static Document personalEmailZone(Document doc){
    //tempString is the personal information section of a resume
    String tempPI = doc.tempString();
    if(doc.tempString().matches(EMAIL_PATTERN) == true){

上記のステートメントは、ドキュメント全体を電子メール アドレス パターンと照合しようとします。doc.tempString()メールアドレスが 1 つだけで他に何も含まれていない場合を除き、これは一致しません。

        //Pattern pattern = Pattern.compile("");
        Pattern pattern = Pattern.compile(EMAIL_PATTERN);
        Matcher matcher = pattern.matcher(tempPI);
        String emailTemp = "";
        if(matcher.find()){
            emailTemp = matcher.group();
            System.out.println(emailTemp);
            //PI.replace(emailTemp, "");
            System.out.println(emailTemp.replace(emailTemp, ""));

上記が何のためにあるのかわかりません。コードがこのポイントに達すると、常に空の行が出力されます。

            tempPI = tempPI.replace(emailTemp, "");
            System.out.println(tempPI);
        }

ループがないため、最初に見つかった電子メール アドレスのみが置き換えられます。すべてのオカレンスを置き換えることを期待している場合は、入力をループする必要があります。

    }
    return doc;

この時点では、実際には を変更docしていないため、ドキュメントを元の形式で返し、電子メール アドレスを含めます。

}

Javadoc を見てくださいString#replaceAll(String regex, String replacement)

于 2012-08-07T17:52:04.883 に答える