有没有办法从ArrayList.toString()获取的String中获取ArrayList?

时间:2017-07-09 12:02:47

标签: java arraylist

我有这段代码:

ArrayList<String> list = new ArrayList<>();
String str = list.toString(); // Stored in a database

是否有快速方法从字符串中恢复ArrayList?

3 个答案:

答案 0 :(得分:3)

不,没有可靠的方法可以做到这一点。

请考虑以下事项:

List<String> list = new ArrayList<>();
list.add("A");
list.add("B, C");  // this contains commas 
list.add("D");

System.out.println(list);  // [A, B, C, D] : Note, only three elements were added 

一些解决方案:

  • 使用正确的序列化机制(例如JSON)而不是toString()
  • 以更normalised的方式存储您的数据(而不是序列化到单个记录中)。

答案 1 :(得分:2)

没有一个通用的解决方案,因为ArrayList.toString()方法将打印用逗号分隔的所有元素。但是绝对没有办法确定输出字符串中的逗号是否是因为元素的分离,还是字面上包含在字符串(或对象)中。

考虑以下两个代码段:

List<String> list = new ArrayList<>();
list.add("one");
list.add("two, three");
System.out.println(list);  // [one, two, three]

List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
System.out.println(list);  // [one, two, three]

如您所见,这两个示例都给出了完全相同的输出。

但是,如果列表中的元素是其他类型的,(让我们说Integer,Double等......或者甚至是没有逗号的String),那么你可以简单地使用

 Arrays.asList(outString.split(",\\s"));

答案 2 :(得分:0)

当然,你可以做到。

 ArrayList<String> list = new ArrayList<>();
 String str = list.toString();

 int len = str.length();
 str = str.substring(1, len-1);
 String[] parts = str.split(",");
 List<String> list2 = Arrays.asList(parts);

但这有一个限制。如果list含有逗号(,)的任何值,那么它会给你错误的输出。在这种情况下,您应该在将逗号转换为String之前将其转义。或者您可以使用任何序列化机制,如 JSON

另一种方法是,不要直接调用toString()。相反,您可以使用String JoinerExample can be found here)。使用任何安全的角色。然后拆分你的字符串以获取列表。