如何只更改java.net.URL对象的协议部分?

Alc*_*sta 4 java http

我有一个使用HTTPS协议的java.net.URL对象,例如:

https://www.bla.com
Run Code Online (Sandbox Code Playgroud)

我只需要更改此URL对象的协议部分,这样当我调用它的toString()方法时,我得到这个:

http://www.bla.com
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

ska*_*man 14

您将使用可用的方法:

URL oldUrl = new URL("https://www.bla.com");
URL newUrl = new URL("http", oldUrl.getHost(), oldUrl.getPort(), oldUrl.getFile(), oldUrl.getRef());
Run Code Online (Sandbox Code Playgroud)

有一个更广泛的set()方法需要8个项目,您可能需要更精细的URL.

编辑:正如刚刚向我指出的那样,我没有注意,并且set()受到保护.所以URL在技术上是可变的,但对于我们凡人来说,它是不可改变的.所以你只需构建一个新的URL对象.

  • 看起来你为构造函数采用了URL.set()方法的参数,但实际上并没有这种原型的构造函数. (3认同)
  • 这是一个错误的答案.没有带有该签名的构造函数.网址只是臭 (2认同)

小智 5

您还可以使用字符串替换:

URL oldUrl = new URL("https://www.bla.com");
String newUrlString = oldUrl.toString().replaceFirst("^https", "http");
URL newUrl = new URL(newUrlString);
Run Code Online (Sandbox Code Playgroud)