Java中打印TreeMap<String,TreeSet<String>>如何去除输出内容的方括号
你之前的输出带方括号,是因为直接将TreeSet实例传入格式化方法时,会默认调用TreeSet的toString()方法,该方法的原生实现就是将元素用方括号包裹、逗号分隔拼接,以下是可选的实现方案:
实现方案
- 方案1:使用JDK自带的
String.join方法(推荐,Java 8及以上版本支持)
这是最稳妥的原生解决方案,直接用指定分隔符拼接TreeSet的所有元素,不会受元素本身内容影响,无需引入额外依赖。
if (abbreviations.size() > 0) { abbreviations.forEach((x, y) -> { // 用", "作为分隔符拼接TreeSet中的所有字符串元素 String setContent = String.join(", ", y); System.out.println(String.format("%-7s : %-100s ", x, setContent)); }); }
- 方案2:遍历TreeSet手动拼接(适配Java 8以下低版本)
如果使用的Java版本不支持String.join,可以通过遍历手动拼接内容:
if (abbreviations.size() > 0) { abbreviations.forEach((x, y) -> { StringBuilder sb = new StringBuilder(); for (String item : y) { if (sb.length() > 0) { sb.append(", "); } sb.append(item); } System.out.println(String.format("%-7s : %-100s ", x, sb.toString())); }); }
- 方案3:替换toString结果的方括号(仅适合临时调试场景,不推荐)
直接处理TreeSet默认toString输出的首尾方括号,写法简单但存在隐患:如果TreeSet的元素本身包含[或]字符会被错误替换。
if (abbreviations.size() > 0) { abbreviations.forEach((x, y) -> { // 正则匹配移除首尾的方括号 String setContent = y.toString().replaceAll("^\\[|\\]$", ""); System.out.println(String.format("%-7s : %-100s ", x, setContent)); }); }
- 方案4:使用第三方工具类拼接(需引入对应依赖)
如果项目已经引入Apache Commons Lang库,可直接使用StringUtils.join方法实现拼接:
if (abbreviations.size() > 0) { abbreviations.forEach((x, y) -> { String setContent = StringUtils.join(y, ", "); System.out.println(String.format("%-7s : %-100s ", x, setContent)); }); }
内容的提问来源于stack exchange,提问作者Sun
相关产品推荐
相关产品推荐

