在我的软件中,由于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>
?
答案 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);