如何从 ArrayList#toString() 中删除方括号 \[ \]?

新手上路,请多包涵

我在 Java 中创建了一个 Array List,它看起来像这样:

  public static ArrayList<Integer> error = new ArrayList<>();

for (int x= 1; x<10; x++)
 {
    errors.add(x);
 }

当我打印错误时,我得到的错误是

[1,2,3,4,5,6,7,8,9]

现在我想从此数组列表中删除 方括号 ([ ]) 。我以为我可以使用方法 errors.remove(”[”),但后来我发现它只是布尔值并显示 true 或 false。有人可以建议我如何实现这一目标吗?

预先感谢您的帮助。

原文由 Goldengirl 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 969
2 个回答

您可能正在调用 System.out.println 来打印列表。 JavaDoc 说:

 This method calls at first String.valueOf(x) to get the printed object's string value

括号由 ArrayList 的 toString 实现添加。要删除它们,您必须先获取字符串:

 String errorDisplay = errors.toString();

然后去掉括号,像这样:

 errorDisplay = errorDisplay.substring(1, errorDisplay.length() - 1);

依赖 toString() 实现不是好的做法。 toString() 仅用于生成用于日志记录或调试目的的人类可读表示。因此最好在迭代时自己构建 String:

 List<Integer> errors = new ArrayList<>();
StringBuilder sb = new StringBuilder();
for (int x = 1; x<10; x++) {
    errors.add(x);
    sb.append(x).append(",");
}
sb.setLength(sb.length() - 1);
String errorDisplay = sb.toString();

请注意,这不是一个数组,只是一个显示列表内容的字符串。要从列表创建数组,您可以使用 list.toArray()

 // create a new array with the same size as the list
Integer[] errorsArray = new Integer[errors.size()];
// fill the array
errors.toArray(errorsArray );

编辑:从面向对象的角度来看,人们可能会争辩说 errors 和 errorsDisplay 在概念上属于一个类,例如:

 public class Errors {

    private final List<Integer> codes = new ArrayList<>();

    public void add(int error) {
        codes.add(error);
    }

    public Stream<Integer> get() {
        return codes.stream();
    }

    @Override
    public String toString() {
        return codes.stream()
            .map(Object::toString)
            .collect(Collectors.joining(", "));
    }
}

原文由 Adriaan Koster 发布,翻译遵循 CC BY-SA 4.0 许可协议

简短回答: System.out.println(errors.toString().substring(1, errors.toString().length() - 1))

说明:当您调用 System.out.println(obj) 并使用 Object 作为参数时,打印的文本将是 obj.toString() 的结果。 ArrayList.toString() 以一种方式实现,使其代表括号之间的内容 [] 在每个包含的项目的逗号分隔串联中(它们的 .toString() 表示以及).

依赖另一个类的 toString() 实现不是一个好习惯。您应该使用自己的方式来格式化结果。

原文由 dotvav 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题