将列表的字符串表示转换为Java中的列表

stszievb  于 2023-06-04  发布在  Java
关注(0)|答案(4)|浏览(363)

有没有一个简单的(不太复杂的)行?
如果我们有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);,这将是一个行的解决方案。

bmp9r5qi

bmp9r5qi1#

如何将字符串[a,B]转换为字符串列表?
它不是为了这个目的。
与之相关的问题是为什么生成的字符串不是[“a”,“B”]?因为从字符串表示中我们无法区分Arrays.asList(“1”,“2”,“3”)和Arrays.asList(1,2,3)。
这可能与以下情况有关:Arrays.toString()只是用,分隔符连接项的字符串表示,并在其周围放置[]。所以真实的的答案是“因为字符串"1"和整数1具有相同的表示”。这又一次与两者都应该是可打印的这一事实有关。例如,Python区分了__str__()__repr()__,Java只有.toString()
但由于.toString()输出(除了某些特殊情况)仅用于调试,因此这并不重要。
而且也不可能用例如解析生成的字符串。String[].class);,这将是一个线的解决方案。
如果你想这样做,还有其他更适合序列化和反序列化的解决方案。
序列化的格式为

  • 二进制
  • XML
  • JSON

所有这些都是由一对明确的串行化数据创建和反串行化组成的,这两个过程是相反的。

m2xkgtsf

m2xkgtsf2#

有一些方法可以做到这一点,但我不认为有任何方法可以直接使它。而且在您尝试处理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;
}
58wvjzkj

58wvjzkj3#

正如另一个答案所暗示的那样,这样做不是一个好主意。但还是给予回答你的问题:
如何将string [a,B]转换为字符串列表?

String s = "[a, b]";

//remove first and last character and create array of Strings splitting around the characters ", "
String[] strings = s.substring(1, s.length() - 1).split(",");

List<String> list = Arrays.asList(strings);
System.out.println(list);

请注意,如果列表中的某个字符串包含逗号,这将不起作用,但没有办法处理这种情况。
或者你可以使用org.springframework.util.StringUtils.commaDelimitedListToStringArray,但它会保留前导空格。

ep6jt1vc

ep6jt1vc4#

不要使用toString进行序列化/反序列化。
相反,你应该把它转换成字符串如下:

String str = objectMapper.writeValueAsString(list);

// To convert it back into string array

objectMapper.readValue(str, String[].class);

相关问题