是否有简单,简单(不太复杂)的一行?
如果我们有List<String> li1 = Arrays.asList("a","b");
,则li1.toString()
将产生[a, b]
。那么如何将字符串[a, b]
转换为字符串列表?
与此相关的一个问题是,为什么生成的字符串不是["a","b"]
?因为从字符串表示形式中我们无法区分Arrays.asList("1","2","3")
与Arrays.asList(1,2,3)
。而且也不可能用。杰克逊(Jackson)和objectMapper.readValue(li1.toString(), String[].class);
,那就是那一行解决方案。
答案 0 :(得分:3)
那么如何将字符串[a,b]转换为字符串列表?
不是为了这个目的。
与此相关的问题是,为什么生成的字符串不是[“ a”,“ b”]?因为从字符串表示形式中我们无法将Arrays.asList(“ 1”,“ 2”,“ 3”)与Arrays.asList(1,2,3)区分开。
这可能与以下内容有关:Arrays.toString()
仅使用,
分隔符将项目的字符串表示形式串联起来,并在其周围放置[]
。因此,真正的答案是“因为字符串"1"
和整数1
具有相同的表示形式”。再次,这与以下事实有关:两者都应可以原样打印。例如,Python区分__str__()
和__repr()__
,Java只有.toString()
。
但是由于.toString()
输出(除某些特殊情况外)仅用于调试,因此没有关系。
而且也不可能用。杰克逊(Jackson)与objectMapper.readValue(li1.toString(),String []。class);,这就是那一行解决方案。
如果您要这样做,还有其他更适合序列化和反序列化的解决方案。
序列化格式为
所有这些都是由一对明确的序列化数据创建和反序列化组成的,它们的作用相反。
答案 1 :(得分:0)
正如另一个答案所建议的那样,这样做不是一个好主意。但是仍然要回答您的问题:
如何将字符串[a,b]转换为字符串列表?
String s = "[a, b]";
//remove first and last character and create array of Strings splitting around the character ','
String[] strings = s.substring(1, s.length() - 1).split(",");
//Now since every element except the first one has an extra leading space, remove it
for (int i = 1; i < strings.length; i++) {
strings[i] = strings[i].substring(1);
}
List<String> list = Arrays.asList(strings);
System.out.println(list);
请注意,如果列表中的一个字符串包含逗号,则此命令将不起作用,但是无法处理这种情况。
或者您可以使用org.springframework.util.StringUtils.commaDelimitedListToStringArray,但它将保留前导空格。
答案 2 :(得分:0)
请勿使用toString进行序列化/反序列化。
相反,您应该将其转换为字符串,如下所示:
String str = objectMapper.writeValueAsString(list);
// To convert it back into string array
objectMapper.readValue(str, String[].class);
答案 3 :(得分:0)
有一些方法可以做到,但我认为没有任何方法可以直接实现它。
而且,在尝试处理toString()
时也不是一个好主意(例如,可以覆盖它)。
一种可能的解决方案如下:
public static List<String> getListFromListStringArray(String inString){
List<String> returnList = null;
System.out.println("in: " + inString);
/*
* Will remove leading and trailing [ ]
* [a, b] => a, b
*/
inString = inString.replaceAll("[\\[\\]]", "");
/*
* Will create List from String array by delimiter (, ) in this case
*/
returnList = Arrays.asList(inString.split(", "));
//[a, b]
System.out.println(returnList.toString());
return returnList;
}