5

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
  • 4
    Note that if the elements of the List are not String objects then the reverse action might be impossible to do because theList.toString() will call toString() on all elements and that might or might not be a reversable action (i.e. the String representation might not contain all information necessary to reproduce the original object). Commented Oct 5, 2009 at 7:01

6 Answers 6

8

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

Sign up to request clarification or add additional context in comments.

4 Comments

In this case, I was using strings, so I guess parsing it myself is simple enough. Thank you.
Of course, this would work only if the strings don't themselves contain the comma characters, which is the first point in my response.
Personally I would create a Codec class for this, so it is possible to parameterize the class (later on) and check for specific good/bad encodings.
What if my string in the arraylist contains ',' in it ?
3

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.

Comments

1

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.

2 Comments

The List.toString() format is pretty different from JSON. In fact it's a lot simple (and a lot less powerful). Using a JSON library is overkill (and probably just wrong).
Implementing own buggy parser is just wrong. Using tested library is much better, always.
0

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 Integers)

  • 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.

Comments

0

Apache Commons ftw.

Arrays.asList(StringUtils.split(StringUtils.substringBetween("[1, 2, 3]", "[", "]"), ", "))

Comments

0
private List<String> parseStringToList(String column) {
    List<String> output = new ArrayList<>();
    String listString = column.substring(1, column.length() - 1);
    StringTokenizer stringTokenizer = new StringTokenizer(listString,",");
    while (stringTokenizer.hasMoreTokens()){
      output.add(stringTokenizer.nextToken());
    }
    return output;
  }

In case the above gives a compilation error. (Can't use forEach on StringTokenizer)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.