在Java中将列表的字符串表示形式转换为列表
有没有一条简单的(不太复杂的)线 如果我们有在Java中将列表的字符串表示形式转换为列表,java,Java,有没有一条简单的(不太复杂的)线 如果我们有List li1=Arrays.asList(“a”,“b”),则li1.toString()将产生[a,b]。那么如何将字符串[a,b]转换为字符串列表呢 与之相关的问题是,为什么生成的字符串不是[“a”,“b”]?因为从字符串表示中,我们无法区分Arrays.asList(“1”、“2”、“3”)和Arrays.asList(1,2,3)。此外,也不可能用Jackson withobjectMapper.readValue(li1.toString
List li1=Arrays.asList(“a”,“b”)
,则li1.toString()
将产生[a,b]
。那么如何将字符串[a,b]
转换为字符串列表呢
与之相关的问题是,为什么生成的字符串不是
[“a”,“b”]
?因为从字符串表示中,我们无法区分Arrays.asList(“1”、“2”、“3”)
和Arrays.asList(1,2,3)
。此外,也不可能用Jackson withobjectMapper.readValue(li1.toString(),string[].class)解析生成的字符串代码>,这将是一行解决方案
那么,如何将字符串[a,b]转换为字符串列表呢
它不是为了这个目的
与之相关的问题是,为什么生成的字符串不是[“a”,“b”]?因为从字符串表示中,我们无法区分array.asList(“1”、“2”、“3”)和array.asList(1,2,3)
这可能与以下内容有关:Arrays.toString()
只是将项的字符串表示形式与,
分隔符连接起来,并将[]
放在其周围。因此,真正的答案是“因为字符串“1”
和整数1
具有相同的表示形式”。这又一次与这样一个事实有关,即两者都应该是可打印的。例如,Python区分了\uuu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
但是,由于.toString()
输出(除了某些特殊情况外)仅用于调试,因此这不重要
此外,也不可能使用诸如Jackson和objectMapper.readValue(li1.toString(),string[].class)来解析生成的字符串;,这就是单线解决方案
如果您想这样做,还有其他更适合sertialization和反序列化的解决方案
序列化的格式是
- 二进制的
- XML
- JSON
所有这些都是由一对明确的序列化数据创建和反序列化组成的,它们的作用正好相反
那么,如何将字符串[a,b]转换为字符串列表呢
它不是为了这个目的
与之相关的问题是,为什么生成的字符串不是[“a”,“b”]?因为从字符串表示中,我们无法区分array.asList(“1”、“2”、“3”)和array.asList(1,2,3)
这可能与以下内容有关:Arrays.toString()
只是将项的字符串表示形式与,
分隔符连接起来,并将[]
放在其周围。因此,真正的答案是“因为字符串“1”
和整数1
具有相同的表示形式”。这又一次与这样一个事实有关,即两者都应该是可打印的。例如,Python区分了\uuu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
但是,由于.toString()
输出(除了某些特殊情况外)仅用于调试,因此这不重要
此外,也不可能使用诸如Jackson和objectMapper.readValue(li1.toString(),string[].class)来解析生成的字符串;,这就是单线解决方案
如果您想这样做,还有其他更适合sertialization和反序列化的解决方案
序列化的格式是
- 二进制的
- XML
- JSON
所有这些都是由一对明确的序列化数据创建和反序列化组成的,它们的作用正好相反。正如另一个答案所建议的,这样做不是一个好主意。但还是要回答你的问题:
如何将字符串[a,b]转换为字符串列表
String s=“[a,b]”;
//删除第一个和最后一个字符,并创建围绕字符“,”拆分的字符串数组
String[]strings=s.substring(1,s.length()-1);
//现在,由于除第一个元素外的每个元素都有一个额外的前导空间,所以请将其删除
for(int i=1;i
请注意,如果列表中的某个字符串包含逗号,这将不起作用,但无法处理这种情况
或者您可以使用,但它将保留前导空格。正如另一个答案所建议的,这样做不是一个好主意。但还是要回答你的问题:
如何将字符串[a,b]转换为字符串列表
String s=“[a,b]”;
//删除第一个和最后一个字符,并创建围绕字符“,”拆分的字符串数组
String[]strings=s.substring(1,s.length()-1);
//现在,由于除第一个元素外的每个元素都有一个额外的前导空间,所以请将其删除
for(int i=1;i
请注意,如果列表中的某个字符串包含逗号,这将不起作用,但无法处理这种情况
或者可以使用,但它将保留前导空格。不要使用toString进行序列化/反序列化
相反,您应该将其转换为字符串,如下所示:
String str = objectMapper.writeValueAsString(list);
// To convert it back into string array
objectMapper.readValue(str, String[].class);
不要使用toString进行序列化/反序列化
相反,您应该将其转换为字符串,如下所示:
String str = objectMapper.writeValueAsString(list);
// To convert it back into string array
objectMapper.readValue(str, String[].class);
有一些方法可以做到这一点,但我不认为有任何方法可以直接做到这一点。
在您尝试时处理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;
}
公共静态列表getListFromListStringArray(字符串指令){
List returnList=null;
System.out.println(“in:+inString”);