如何将arrayList.toString()转换为实际的arraylist

时间:2015-04-14 02:22:52

标签: java arrays arraylist

在我的软件中,由于Array中没有SQLite数据类型,因此我将ArrayList保存为String。现在我需要使用我的数组并希望将其转换回ArrayList。我该怎么办?

这是一个例子:

ArrayList<String> list = new ArrayList<String>();
list.add("name1");
list.add("name2");
list.add("name3");
list.add("name4");
list.add("name5");
list.add("name6");

String newList = list.toString();
System.out.println(newList);

结果:[name1, name2, name3, name4, name5, name6]

现在我该如何将其转换为ArrayList<String>

3 个答案:

答案 0 :(得分:3)

我相信这应该有效:

Arrays.asList(newList.substring(1, newList.length() - 1).replaceAll("\\s", "").split(","));
  • 取弦,取下第一个和最后一个支架。
  • 删除每个空格。
  • 用逗号分隔为分隔符,按列表收集。

请注意,如果您真的需要为项目执行此操作,那么代码设计中就会出现问题。但是,如果这只是出于好奇目的,那么这个解决方案就可以了。


测试后

ArrayList<String> list = new ArrayList<String>();
list.add("name1");
list.add("name2");
list.add("name3");
list.add("name4");
list.add("name5");
list.add("name6");

String newList = list.toString();                
List<String> myList = Arrays.asList(newList.substring(1, newList.length() - 1).replaceAll("\\s", "").split(","));

System.out.println(myList);

将正确编译并打印:

[name1, name2, name3, name4, name5, name6]

修改

根据您的评论,如果您真的希望您的变量是ArrayList<String>实例,那么您可以将列表传递给ArrayList构造函数:

ArrayList<String> myList = new ArrayList(Arrays.asList(newList.substring(1, newList.length() - 1).replaceAll("\\s", "").split(",")));

您无法直接投射Arrays.asList使用自己的内置java.util.Arrays$ArrayList课程。

答案 1 :(得分:1)

如果没有歧义,这是不可能的。考虑:

ArrayList<String> list = new ArrayList<String>();
list.add("name1, name2");
list.add("name3, name4");
list.add("name5");
list.add("name6");

String newList = list.toString();
System.out.println(newList);

Result: [name1, name2, name3, name4, name5, name6]

为了在一般情况下准确恢复原始元素,您的字符串格式必须比ArrayList.toString()更智能。考虑一种预定义的编码字符串列表的方法,也许是一个JSON数组,这会为我的例子产生类似的结果:

["name1, name2", "name3, name4", "name5", "name6"]

JSON还定义了如何通过转义和/或使用备用字符串开始/结束字符'"来处理带引号的字符串:

["he said, 'hello'", 'she said, "goodbye"', 'I said, "it\'s raining"']

(我也同意其他评论者认为您的数据库设计应该重新考虑,但希望提供一个明确的答案来说明列表字符串编码的问题。)

答案 2 :(得分:-1)

那么只接受字符串的方法能够添加传递这样的东西的情况吗?

methodThatOnlyAllowsStrings((Object)list);