Java 从 url 获取电子邮件地址

Java get email address from url

我有这个 url mailto:email@gmail.com?subject=... 我想提取电子邮件地址。

我已经这样做了:

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

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

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

您可以尝试只提取

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

这也将处理末尾没有 ? 的情况。

使用 URL class 并调用 getPath 方法。

例如:

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