有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

regex Java从url获取电子邮件地址

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

我已经做到了:

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

这是可行的,但我对这个解决方案不满意

有没有一种方法可以使用正则表达式或比我所做的更好的方法来实现这一点


共 (2) 个答案

  1. # 1 楼答案

    使用URL类并调用getPath方法

    例如:

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

    您只能尝试提取

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

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