我有这段代码:
ArrayList<String> list = new ArrayList<>();
String str = list.toString(); // Stored in a database
是否有快速方法从字符串中恢复ArrayList?
答案 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
一些解决方案:
toString()
。答案 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 Joiner
(Example can be found here)。使用任何安全的角色。然后拆分你的字符串以获取列表。