データを文字列に格納するtoString
メソッドを使用しています。私の質問は、どうすれば逆に行くことができますか?インスタンス内のデータを解析して元に戻す既存のメソッドはありますか?ArrayList
ArrayList
String
ArrayList
6 に答える
簡単な答えは「いいえ」です。シリアル化で特定の型情報が失われるため、文字列からオブジェクトを再インポートする簡単な方法はありません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;
}
シリアル化された形式からオブジェクトを再構成することは、一般に逆シリアル化と呼ばれます
同様の質問があります:
Arrays.toString(int [])の逆(出力を解析)
これは、ArrayListに何を格納しているか、およびそれらのオブジェクトが文字列表現から簡単に再構築できるかどうかによって異なります。
代わりに、ライブラリを備えた標準形式を使用することをお勧めします。
JSONはおそらく構文的に最も近いものです。
あるいは、XMLまたはシリアル化ベースのソリューションも機能する可能性があります。もちろん、それはすべてあなたのニーズに依存します。
ArrayListは何で構成されていますか?他の人が言ったように、それは特定の場合には不可能かもしれませんが、次の場合にはかなり可能であり、動作することが保証されています:
配列の要素の各文字列表現は、明確に識別できます(たとえば、ArrayListが
Integer
sで構成されている場合など) 。文字列表現から元のタイプのオブジェクトを作成する方法があります。静的な方法を使用してこれを行うのが最もエレガントだと思います
fromString
もちろん、これは(逆)シリアル化フレームワーク全体を模倣しています。
ApacheCommonsftw。
Arrays.asList(StringUtils.split(StringUtils.substringBetween("[1, 2, 3]", "[", "]"), ", "))
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;
}
上記の場合、コンパイルエラーが発生します。(StringTokenizerでforEachを使用することはできません)