Что является противоположностью (ArrayList) .toString для Java ArrayList? - PullRequest
4 голосов
/ 05 октября 2009

Я использую toString метод ArrayList для хранения ArrayList данных в строку. У меня вопрос, как мне пойти другим путем? Существует ли существующий метод, который будет анализировать данные в экземпляре String обратно в ArrayList?

Ответы [ 5 ]

8 голосов
/ 05 октября 2009

Краткий ответ - «Нет». Нет простого способа повторно импортировать объект из строки, так как определенная информация о типе теряется при сериализации toString().

Однако для определенных форматов и определенных (известных) типов вы должны иметь возможность писать код для анализа строки вручную:

// 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;
}

Восстановление объектов из их сериализованной формы обычно называется десериализацией

3 голосов
/ 05 октября 2009

Вот похожий вопрос:

Обратный (анализ выходных данных) Arrays.toString (int [])

Это зависит от того, что вы храните в ArrayList, и от того, легко ли эти объекты восстанавливаются из их представлений String.

0 голосов
/ 02 августа 2012

Apache Commons ftw.

Arrays.asList(StringUtils.split(StringUtils.substringBetween("[1, 2, 3]", "[", "]"), ", "))
0 голосов
/ 05 октября 2009

Из чего состоит ArrayList? Как говорили другие, в некоторых случаях это может быть невозможно, но вполне возможно и гарантированно сработает , если :

  • каждое строковое представление элемента массива можно однозначно идентифицировать (как, например, если ArrayList состоит из Integer s)

  • есть способ создать объект оригинального типа из его представления String. Я считаю, что это наиболее элегантно сделать, используя статический метод fromString

Конечно, это имитирует всю (де) структуру сериализации.

0 голосов
/ 05 октября 2009

Я бы рекомендовал вместо этого использовать какой-нибудь стандартный формат с библиотекой.

JSON , вероятно, наиболее близко синтаксически.

В качестве альтернативы может также подойти некоторое решение на основе XML или сериализации. Конечно, все зависит от ваших потребностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...