【问题标题】:Remove port number from a url in java从java中的url中删除端口号
【发布时间】:2020-09-18 16:13:43
【问题描述】:

我想在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;
}

【问题讨论】:

  • 您可以使用 URL.getDefaultPort()。见this answer第二部分。
  • @VGR:您的评论应该是被接受和赞成的答案。

标签: java url port uri


【解决方案1】:

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

String urlNo80 = url80.replaceFirst(":\\d+", "");

【讨论】:

  • 如果:8809 完全位于 URL 中的其他位置,这将不起作用...
  • 那会在哪里?我不确定我明白你的意思。
  • 这真的是一个有效的网址吗?
【解决方案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

【讨论】:

  • BEWARE:是的,这会将http://www.somewhere.com:80/someplace 变成http://www.somewhere.com/someplace,但它也会将http://www.somewhere.com:1234/someplace 变成http://www.somewhere.com/someplace,这意味着这对我来说是一个非常危险的解决方案意见。
猜你喜欢
  • 2014-07-18
  • 2011-07-04
  • 2015-08-17
  • 2017-01-01
  • 2016-02-06
  • 2014-12-18
  • 2018-08-16
相关资源
最近更新 更多