在一次调用中将 ArrayList.toString() 转换回 ArrayList

2022-09-03 12:20:17

我有一个.toString()ArrayList

将值复制到剪贴板,我想将其复制回IDE编辑器中,并在一行中创建实例。事实上,我真正在做的是这样的:toString()ArrayList

  • 我的ArrayList.toString()有数据,我需要设置一个单元测试。
  • 我想把这个ArrayList.toString()复制到我的编辑器中,以针对这个边缘情况构建一个测试
  • 我不想手动解析任何内容

我的输入如下所示:

[15.82, 15.870000000000001, 15.92, 16.32, 16.32, 16.32, 16.32, 17.05, 17.05, 17.05, 17.05, 18.29, 18.29, 19.16]

以下情况不起作用:

  • Arrays.asList()
  • 谷歌收藏Lists.newArrayList()

建议?


答案 1

将大括号子开,将其拆分(逗号和空格),最后将其提供给 。,Arrays#asList()

 String s = "[15.82, 15.870000000000001, 15.92, 16.32, 16.32, 16.32, 16.32, 17.05, 17.05, 17.05, 17.05, 18.29, 18.29, 19.16]";
 List<String> list = Arrays.asList(s.substring(1, s.length() - 1).split(", "));

请注意,这适用于您的特定情况,但并非在所有情况下都有效。例如,您可能有一个字符串列表,其中至少有一个包含后续的逗号和空格。然后,拆分将失败。


答案 2

一般来说,任何对象都不包含复制原始对象的信息而没有任何进一步的信息。toString()

在您的特定情况下,该示例可以由许多不同的实例(以及几乎所有具有相同)实现的其他实现生成。ArrayListListtoString()

作为一个极端的例子,想想一个包含单个元素的,该元素是 内容 。这将产生与原始完全相同的输出。由于两个不同的输入产生相同的输出,因此如果没有其他信息,就无法反转此函数。ArrayListString15.82, 15.870000000000001, 15.92, 16.32, 16.32, 16.32, 16.32, 17.05, 17.05, 17.05, 17.05, 18.29, 18.29, 19.16ArrayListArrayList

但是,如果我们有其他信息,例如 原始内容类型 ,那么在某些情况下成为可能。如果我们知道 的所有元素都是 类型 ,那么它实际上很容易:ArrayListListDouble

public static List<Double> stringToList(final String input) {
    String[] elements = input.substring(1, input.length() - 1).split(", ");
    List<Double> result = new ArrayList<Double>(elements.length);
    for (String item : elements) {
        result.add(Double.valueOf(item));
    }
    return result;
}

当然,这不是一句话,但还不错。