仅使用主机、端口和路径将 URI 转换为字符串

Mic*_*das 3 java string uri

我有java.net.URI类型的对象,我想将它转换为String表示,但我只对以下组件感兴趣:

  • 主持人
  • 港口
  • 小路

我不想有任何其他元素,如查询、片段、用户信息或方案。

做手工的getHost()getPort()并且getPath()看起来像一个脆弱的解决方案。是否有任何URI格式化程序或自定义toString可用?

这里的脆弱我的意思是可能有一些我可能忘记手动处理的极端情况。就像主机是 IPv6 地址的情况一样,然后它需要有括号

Jon*_*eet 7

您可以相当轻松地构建一个新的 URI:

URI partial = new URI(
    null, // scheme
    null, // user info
    uri.getHost(),
    uri.getPort(),
    uri.getPath(),
    null, // query
    null); // fragment
String text = partial.toString();
Run Code Online (Sandbox Code Playgroud)

您可能想要验证主机是否为非空,以便使其合理。

或者,串联方法真的不太可能更复杂 - 我假设您将进行单元测试以检查所有组合,无论实现方式如何。