将URI转换为仅包含主机、端口和路径的字符串

5
我有一个 java.net.URI 类型的对象,我想将其转换为 String 表示形式,但我只对以下组件感兴趣:
  • 主机
  • 端口
  • 路径

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

通过 getHost()getPort()getPath() 手动完成看起来是一种脆弱的解决方案。是否有可用的 URI 格式化程序或自定义的 toString

在这里所说的脆弱意味着可能会有一些边缘情况,我可能会忘记手动处理。比如当主机是 IPv6 地址时,需要使用括号。


注:需保留html标签

@SamSun 我需要手动完成所有的串联和处理缺失组件,这样容易出错。 - Michal Kordas
@MichalKordas:对我来说,这似乎相当简单。大约10行代码,易于测试... - Jon Skeet
1
URI标准有很好的文档记录。我想一个简单的String.format应该已经足够了。 - samczsun
@SamSun,请查看编辑后的问题,我仍然认为可能存在一些边角情况,朴素解决方案无法处理。 - Michal Kordas
1个回答

9

您可以相对容易地构建一个新的URI:

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

为了使它有意义,您可能希望验证主机是非空的。

另外,串联方法很可能不会更加复杂 - 我假设您将具有单元测试来检查所有组合,无论其实现方式如何。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接