【问题标题】:Java get email address from urlJava 从 url 获取电子邮件地址
【发布时间】:2015-02-05 17:21:40
【问题描述】:

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

我已经这样做了:

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

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

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

【问题讨论】:

  • 您的字符串是否总是采用mailto:email@host.domain?stuff 的形式?因为如果是这样,您不需要正则表达式来解析它。只需删除开头部分,以及之后/包括? 的所有内容
  • 为什么2票反对?当然我已经搜索过了,问题是我不知道我在寻找什么......
  • 我怀疑你被否决了,因为“我对这个解决方案不满意。”没有说明你为什么认为这个解决方案不好。因此,我们也不知道我们的替代解决方案是否好用,这使您的问题难以回答。

标签: java regex string url mailto


【解决方案1】:

你可以尝试只提取

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

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

【讨论】:

  • 非常感谢您的回答!我只是问,我认为使用这种split 方法不好,或者regex 更好。
【解决方案2】:

使用 URL 类并调用 getPath 方法。

例如:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2011-03-27
    • 2013-04-18
    相关资源
    最近更新 更多