Java从url获取电子邮件地址

时间:2015-02-05 17:21:40

标签: java regex string url mailto

我有此网址mailto:email@gmail.com?subject=...,我想提取电子邮件地址。

我已经这样做了:

String[] s = url.split("[:?]");

它有效,但我对此解决方案不满意。

有没有办法使用正则表达式或比我更好的方法做到这一点?

2 个答案:

答案 0 :(得分:3)

您可以尝试仅提取

protocol:path?query
         ^^^^

部分与URL#getPath

String email= new URL("mailto:email@gmail.com?subject").getPath();

System.out.println(email);

输出:email@gmail.com


但你也可以简单地使用第一个:和第一个?之后的位置来确定你应该在哪里剪切字符串。

String data = "mailto:email@gmail.com?subject";
int colonIndex = data.indexOf(':')+1;
int questionMarkIndex = data.indexOf('?',colonIndex);
String email = null;
if (questionMarkIndex>colonIndex){
    email = data.substring(colonIndex,questionMarkIndex);
}else{//there was no `?` after `:`
    email = data.substring(colonIndex);
}
System.out.println(email);

但实际上我不确定为什么你对split("[:?]")不开心”。这是非常好的解决方案:

String data = "mailto:email@gmail.com?subject";
String email = data.split("[:?]")[1];

System.out.println(email);

还将处理最后没有?的情况。

答案 1 :(得分:1)

使用URL类并调用getPath方法。

例如:

URL url = new URL("mailto:email@gmail.com?subject=foo");
String email = url.getPath();