我可能会收到一个String
,它实际上是一个ArrayList
,例如:String x = "["one", "two"]";
我想检查字符串是否是有效的数组列表。
if(key.startsWith("[") && key.endsWith("]"))
语句是否有效,但我想知道是否有另一种更好的方法?
有没有更好的方法?
ArrayList
的toString()
实现来自AbstractCollection。
如果您看一下该函数(靠近底部),您会注意到它使用泛型类型E
附加到内部StringBuilder
。这是因为代码不知道您要在集合中放入哪种元素 - 它可能是String
s,如您的示例,也可能是更复杂的元素,如Map
s。它将尝试调用每个元素的内部toString()
函数,并默认为Object
的toString()
方法。
您可以从检查 String 是否以方括号[
和]
开头和结尾开始,但对于任何进一步的内容,您都必须对放入ArrayList
中的任何元素的toString()
方法进行逆向工程。
ArrayList<String>
的字符串表示形式(似乎是上面的示例)不引用其元素。因此,由于String
可以包含任意数量的逗号和空格,因此无法区分元素。为了说明这一点,请考虑以下方案:
String s1 = "a, ";
String s2 = "b";
List<String> list = new ArrayList<>();
list.add(s1);
list.add(s2);
System.out.println(list.toString()); // [a, , b]
是有两个元素a,
和b
还是两个元素a
和, b
?