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 回答