我使用toString
ArrayList
方法将ArrayList
数据存储到字符串中。我的问题是,我该如何走另一条路?是否存在将String
实例中的数据解析为ArrayList
的现有方法?
答案 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)
答案 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]", "[", "]"), ", "))