我有此网址mailto:email@gmail.com?subject=...
,我想提取电子邮件地址。
我已经这样做了:
String[] s = url.split("[:?]");
它有效,但我对此解决方案不满意。
有没有办法使用正则表达式或比我更好的方法做到这一点?
答案 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();