在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 with
objectMapper.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”);