有 Java 编程相关的问题?

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

在java中从url中删除端口号

我想用java编写一个函数,如果端口是默认端口,它将删除该端口

所以如果给予

String url80 = "http://www.somewhere.com:80/someplace";

它会回来的

String urlNo80 = "http://www.somewhere.com/someplace";

如果给予

String url443 = "https://www.somewhere.com:443/someplace";

它会回来的

String urlNo443 = "https://www.somewhere.com/someplace";

有比这更好的方法吗

public String removePortIfDefault(String inUrl) {
    String returnUrl = inUrl;
    if (inUrl.contains("http://") && inUrl.contains(":80")) {
        returnUrl = inUrl.replaceAll(":80", "");
    }
    if (inUrl.contains("https://") && inUrl.contains(":443")) {
        returnUrl = inUrl.replaceAll(":443", "");
    }
    return returnUrl;
}

共 (2) 个答案

  1. # 1 楼答案

    可以将replaceFirst(或replaceAll)与正则表达式一起使用

    String urlNo80 = url80.replaceFirst(":\\d+", "");
    
  2. # 2 楼答案

    不要使用字符串操作来处理URL。Java有这样的类

    String url80 = "http://www.somewhere.com:80/someplace";
    
    // Using java.net.URI
    URI uri = URI.create(url80);
    uri = new URI(uri.getScheme(), uri.getHost(), uri.getPath(), uri.getFragment());
    String urlNo80 = uri.toString(); // http://www.somewhere.com/someplace
    
    // Using java.net.URL
    URL url = new URL(url80);
    url = new URL(url.getProtocol(), url.getHost(), url.getFile());
    String urlNo80 = url.toString(); // http://www.somewhere.com/someplace