5

と呼ばれるJavaの文字列がありますKiran<kiran@gmail.com>。他のコンテンツを削除して kiran@gmail.com だけの文字列を取得したい。

String s1= kiran<kiran@gmail.com>

出力はkiran@gmail.com

これを解決するのを手伝ってください。

4

2 に答える 2

4

電子メール アドレスを解析しようとしている場合は、InternetAddressクラスを使用することをお勧めします。これは Java EE の一部です (Java SE を使用している場合は、javax.mail依存関係を追加する必要があります)。

そのクラスは、あなたのような電子メール アドレスを含む文字列を解析できます。

String s1 = "kiran<kiran@gmail.com>";
InternetAddress address = new InternetAddress(s1);
String email = address.getAddress();

私はこのように考えています:

  • アルゴリズムは自動的に標準に準拠します
  • あなたのコードは、正規表現を使用して電子メール アドレスを抽出するよりも簡潔です。
于 2012-05-13T10:44:36.293 に答える
2

次のことができます。

String s = "To: John Smith <john@smith.com>, Janes Smith\n"
            + "<jane@smith.org>, Tom Barter <tom@test.co.uk>, Other \n"
            + "Weird @#$@<>#^Names <other@names.me>, \n"
            + "Long Long Long Long Name <longlong@name.com>";
    s = s.substring(3); // filter TO:
    System.out.println(s);
    // Use DOTALL pattern  
    Pattern p = Pattern.compile("(.*?)<([^>]+)>\\s*,?",Pattern.DOTALL);

    Matcher m = p.matcher(s);

    while(m.find()) {
        // filter newline
        String name = m.group(1).replaceAll("[\\n\\r]+", ""); 
        String email = m.group(2).replaceAll("[\\n\\r]+", "");
        System.out.println(name + " -> " + email);
    }
于 2012-05-13T10:44:30.040 に答える