问题
I am using the toString
method of ArrayList
to store ArrayList
data into a String. My question is, how do I go the other way? Is there an existing method that will parse the data in the String
instance back into an ArrayList
?
回答1:
The short answer is "No". There is no simple way to re-import an Object from a String, since certain type information is lost in the toString()
serialization.
However, for specific formats, and specific (known) types, you should be able to write code to parse a String manually:
// Takes Strings like "[a, b, c]"
public List parse(String s) {
List output = new ArrayList();
String listString = s.substring(1, s.length() - 1); // chop off brackets
for (String token : new StringTokenizer(listString, ",")) {
output.add(token.trim());
}
return output;
}
Reconstituting objects from their serialized form is generally called deserialization
回答2:
Here's a similar question:
Reverse (parse the output) of Arrays.toString(int[])
It depends on what you're storing in the ArrayList, and whether or not those objects are easily reconstructed from their String representations.
回答3:
I would recommend using some standard format with a library for it instead.
JSON is probably the closest syntactically.
Alternatively some XML or serialization based solution could work too. It all depends on your needs of course.
回答4:
What does the ArrayList consist of? As others said, it may be impossible in certain cases, but quite possible and guaranteed to work if:
each string representation of element of the array can be identified unambiguously (as it can be for example if the ArrayList consists of
Integer
s)there is a way to create an object of original type from its String representation. I find it most elegant to do this using a static method
fromString
Of course, this mimics the whole (de)serialization framework.
回答5:
Apache Commons ftw.
Arrays.asList(StringUtils.split(StringUtils.substringBetween("[1, 2, 3]", "[", "]"), ", "))
来源:https://stackoverflow.com/questions/1518528/what-is-the-reverse-of-arraylist-tostring-for-a-java-arraylist