简体   繁体   English

如何使用特定范围(电子邮件格式)在Java中过滤字符串

[英]How to filter a String in java with specific range (email format)

I have a String in Java called Kiran<kiran@gmail.com> . 我在Java中有一个名为Kiran<kiran@gmail.com>的字符串。 I want to get String just kiran@gmail.com by removing other content. 我想通过删除其他内容来获取String只是kiran@gmail.com。

String s1= kiran<kiran@gmail.com>

Output should be kiran@gmail.com 输出应为kiran@gmail.com

Please help me out in solving this. 请帮我解决这个问题。

If you are trying to parse email addresses, I'd recommend to use the InternetAddress class. 如果您尝试解析电子邮件地址,建议您使用InternetAddress类。 It is part of Java EE (if you are using Java SE you need to add the javax.mail dependency). 它是Java EE的一部分(如果使用的是Java SE,则需要添加javax.mail依赖项)。

That class is able to parse an String containing an email address like yours. 该类可以解析包含您的电子邮件地址的字符串。

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

I think this way: 我认为这样:

  • Your algorithm is automatically standards-compliant 您的算法自动符合标准
  • Your code is cleaner than using regular expressions to extract the email address. 您的代码比使用正则表达式提取电子邮件地址更干净。

You can do the following thing. 您可以执行以下操作。

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);
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM