我正在使用的toString
方法ArrayList
将ArrayList
数据存储到字符串中。我的问题是,我该如何走另一条路?是否存在将String
实例中的数据解析回的现有方法ArrayList
?
问问题
10635 次
6 回答
8
最简洁的答案是不”。没有简单的方法可以从字符串重新导入对象,因为某些类型信息在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;
}
从序列化形式重构对象通常称为反序列化
于 2009-10-05T07:00:20.570 回答
3
于 2009-10-05T06:48:17.017 回答
0
于 2009-10-05T06:47:00.613 回答
0
ArrayList 由什么组成?正如其他人所说,在某些情况下这可能是不可能的,但如果:
可以明确识别数组元素的每个字符串表示形式(例如,如果 ArrayList 由
Integer
s 组成)有一种方法可以从其 String 表示创建原始类型的对象。我发现使用静态方法执行此操作最优雅
fromString
当然,这模仿了整个(反)序列化框架。
于 2009-10-05T10:42:54.520 回答
0
Apache Commons ftw。
Arrays.asList(StringUtils.split(StringUtils.substringBetween("[1, 2, 3]", "[", "]"), ", "))
于 2012-08-02T12:25:09.850 回答
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)
于 2020-08-07T15:03:30.043 回答