Java重写toString方法时ArrayList返回值带多余[]如何解决?
问题原因
你直接拼接ArrayList类型的courses字段时,会默认调用ArrayList的toString()方法,该方法的输出格式固定为[元素1, 元素2, 元素3],所以会额外携带方括号,和要求的逗号分隔无括号格式不符,导致测试用例不通过。
解决方案
Java 8及以上版本可以直接使用String.join()方法完成字符串拼接,该方法可以指定分隔符,直接将集合中的元素拼接为无额外符号的字符串,是最简单的实现方式。
修改后的toString方法代码
@Override public String toString() { if (courses.isEmpty()) { return this.name + ": courses=NO_COURSES"; } else { String courseStr = String.join(",", courses); return this.name + ": courses=" + courseStr; } }
注:原代码中单独定义布尔变量判断集合是否为空、再和true比较的写法可以直接简化,省略不必要的中间变量,代码更简洁。
如果你使用的是Java 8以下的版本,也可以通过StringBuilder遍历拼接实现:
@Override public String toString() { if (courses.isEmpty()) { return this.name + ": courses=NO_COURSES"; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < courses.size(); i++) { sb.append(courses.get(i)); if (i != courses.size() - 1) { sb.append(","); } } return this.name + ": courses=" + sb.toString(); }
内容的提问来源于stack exchange,提问作者HY2000
相关产品推荐
相关产品推荐

