Java ArrayList的(ArrayList).toString的反转是什么?

时间:2009-10-05 06:38:17

标签: java string arraylist encoding tostring

我使用toString ArrayList方法将ArrayList数据存储到字符串中。我的问题是,我该如何走另一条路?是否存在将String实例中的数据解析为ArrayList的现有方法?

6 个答案:

答案 0 :(得分:8)

简短的回答是“不”。没有简单的方法可以从String重新导入Object,因为toString()序列化中的某些类型信息会丢失。

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

// 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;
}

序列化表单重新构建对象通常称为反序列化

答案 1 :(得分:3)

这是一个类似的问题:

Reverse (parse the output) of Arrays.toString(int[])

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

答案 2 :(得分:0)

我建议使用一些带有库的标准格式。

JSON可能是语法最接近的。

或者,一些基于XML或序列化的解决方案也可以工作。这一切都取决于你的需要。

答案 3 :(得分:0)

ArrayList包含什么?正如其他人所说,在某些情况下可能是不可能的,但很有可能并保证如果

  • 可以明确地识别数组元素的每个字符串表示形式(例如,如果ArrayList包含Integer s)

  • 有一种方法可以从String表示形式创建原始类型的对象。我发现使用静态方法fromString

  • 执行此操作非常优雅

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

答案 4 :(得分:0)

private List<String> parseStringToList(String column) {
    List<String> output = new ArrayList<>();
    String listString = column.substring(1, column.length() - 1);
    StringTokenizer stringTokenizer = new StringTokenizer(listString,",");
    while (stringTokenizer.hasMoreTokens()){
      output.add(stringTokenizer.nextToken());
    }
    return output;
  }

如果以上给出了编译错误。 (不能在StringTokenizer上使用forEach)

答案 5 :(得分:-1)

Apache Commons ftw。

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