关于字符串:Java ArrayList的(ArrayList).toString与之相反?

What is the reverse of (ArrayList).toString for a Java ArrayList?

我正在使用ArrayListtoString方法将ArrayList数据存储到字符串中。 我的问题是,我该怎么走? 是否有现有方法可以将String实例中的数据解析回ArrayList


最简洁的答案是不"。没有简单的方法可以从字符串中重新导入对象,因为在toString()序列化过程中某些类型信息会丢失。

但是,对于特定格式和特定??(已知)类型,您应该能够编写代码来手动解析String:

1
2
3
4
5
6
7
8
9
// Takes Strings like"[a, b, c]"
public List parse(String s) {
  List output = new ArrayList();
  String listString = s.substring(1, s.length() - 1); // chop off brackets
  for (String token : new StringTokenizer(listString,",")) {
    output.add(token.trim());
  }
  return output;
}

从序列化形式重构对象通常称为反序列化


这是一个类似的问题:

反转(解析输出)Arrays.toString(int [])

这取决于您存储在ArrayList中的内容,以及是否可以轻松地从其String表示形式重构这些对象。


阿帕奇公共公园

1
Arrays.asList(StringUtils.split(StringUtils.substringBetween("[1, 2, 3]","[","]"),","))

ArrayList由什么组成?正如其他人所说,在某些情况下这可能是不可能的,但在以下情况下则很有可能且可以保证工作:

  • 可以清楚地标识数组元素的每个字符串表示形式(例如,如果ArrayList由Integer组成)

  • 有一种方法可以从其String表示形式创建原始类型的对象。我发现使用静态方法fromString进行此操作最优雅

当然,这模仿了整个(反序列化)框架。


我建议使用带有库的某种标准格式来代替。

JSON在语法上可能是最接近的。

另外,一些基于XML或序列化的解决方案也可以工作。当然,这完全取决于您的需求。