What is the reverse of (ArrayList).toString for a Java ArrayList?
我正在使用ArrayList的toString方法将ArrayList数据存储到字符串中。 我的问题是,我该怎么走? 是否有现有方法可以将String实例中的数据解析回ArrayList?
-
请注意,如果List的元素不是String对象,则可能无法执行反向操作,因为theList.toString()将在所有元素上调用toString(),并且可能是也可能不是可逆操作(即String表示可能不是 包含复制原始对象所需的所有信息)。
最简洁的答案是不"。没有简单的方法可以从字符串中重新导入对象,因为在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 ;
} |
从序列化形式重构对象通常称为反序列化
-
在这种情况下,我使用的是字符串,所以我想自己解析就足够简单了。 谢谢。
-
当然,这仅在字符串本身不包含逗号字符的情况下才有效,这是我回答的第一点。
-
我个人将为此创建一个Codec类,因此可以参数化该类(以后)并检查特定的好/坏编码。
-
如果我的arraylist中的字符串包含怎么办?
这是一个类似的问题:
反转(解析输出)Arrays.toString(int [])
这取决于您存储在ArrayList中的内容,以及是否可以轻松地从其String表示形式重构这些对象。
阿帕奇公共公园
1
| Arrays. asList(StringUtils. split(StringUtils. substringBetween("[1, 2, 3]", "[", "]"), ",")) |
ArrayList由什么组成?正如其他人所说,在某些情况下这可能是不可能的,但在以下情况下则很有可能且可以保证工作:
当然,这模仿了整个(反序列化)框架。
我建议使用带有库的某种标准格式来代替。
JSON在语法上可能是最接近的。
另外,一些基于XML或序列化的解决方案也可以工作。当然,这完全取决于您的需求。
-
List.toString()格式与JSON完全不同。 实际上,它非常简单(功能却不那么强大)。 使用JSON库是过大的(也许是错误的)。
-
实现自己的错误解析器是错误的。 始终使用经过测试的库要好得多。