有没有一个简单的(不太复杂的)行?
如果我们有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);
,这将是一个行的解决方案。
4条答案
按热度按时间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);,这将是一个线的解决方案。
如果你想这样做,还有其他更适合序列化和反序列化的解决方案。
序列化的格式为
所有这些都是由一对明确的串行化数据创建和反串行化组成的,这两个过程是相反的。
m2xkgtsf2#
有一些方法可以做到这一点,但我不认为有任何方法可以直接使它。而且在您尝试处理
toString()
时也不是一个好主意(它可以被覆盖,例如)。可能的解决方案之一可以如下:
58wvjzkj3#
正如另一个答案所暗示的那样,这样做不是一个好主意。但还是给予回答你的问题:
如何将string [a,B]转换为字符串列表?
请注意,如果列表中的某个字符串包含逗号,这将不起作用,但没有办法处理这种情况。
或者你可以使用org.springframework.util.StringUtils.commaDelimitedListToStringArray,但它会保留前导空格。
ep6jt1vc4#
不要使用toString进行序列化/反序列化。
相反,你应该把它转换成字符串如下: