如何在java中过滤具有特定范围的字符串(电子邮件格式)

如何在java中过滤具有特定范围的字符串(电子邮件格式),java,string,Java,String,我有一个Java字符串,名为Kiran。我只想得到一根绳子kiran@gmail.com通过删除其他内容 String s1= kiran<kiran@gmail.com> String s1=kiran 输出应为kiran@gmail.com 请帮我解决这个问题。你可以做以下事情 String s = "To: John Smith <john@smith.com>, Janes Smith\n" + "<jane@smith.org&

我有一个Java字符串,名为
Kiran
。我只想得到一根绳子kiran@gmail.com通过删除其他内容

String s1= kiran<kiran@gmail.com>
String s1=kiran
输出应为
kiran@gmail.com


请帮我解决这个问题。

你可以做以下事情

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);
    }
String s=“收件人:John Smith,Janes Smith\n”
+,汤姆·巴特,其他\n
+“奇怪的姓名,\n”
+“长名”;
s=s.子串(3);//筛选到:
系统输出打印项次;
//使用DOTALL模式
Pattern p=Pattern.compile(“(.*?)+)>\\s*,?”,Pattern.DOTALL);
匹配器m=匹配器p;
while(m.find()){
//过滤换行符
字符串名称=m.group(1).replaceAll(“[\\n\\r]+”,”);
字符串email=m.group(2).replaceAll(“[\\n\\r]+”,”);
System.out.println(name+“->”+电子邮件);
}

如果您试图解析电子邮件地址,我建议您使用该类。它是JavaEE的一部分(如果您使用JavaSE,则需要添加javax.mail依赖项)

该类能够解析包含类似于您的电子邮件地址的字符串

String s1 = "kiran<kiran@gmail.com>";
InternetAddress address = new InternetAddress(s1);
String email = address.getAddress();
String s1=“kiran”;
InternetAddress地址=新的InternetAddress(s1);
字符串email=address.getAddress();
我这样想:

  • 您的算法自动符合标准
  • 您的代码比使用正则表达式提取电子邮件地址更简洁