0

文字列のリストを Java の 1 つのフィールドに格納する必要があります。順序は重要であり、人間が読める形式で保存することをお勧めします。

完璧な解決策はそれをxPathのように保存することですが、複雑なxmlファイルをxPathにコンパイルするためのライブラリしか知りません。文字列のリストではありません。

区切り文字として使用する文字を含め、任意の文字を含む文字列をサポートしたいので、私自身の作成したソリューションは簡単に複雑になりすぎます。

私は現在、この方法でシリアライゼーションを使用しています:

String[] items = new String[3];
items[0] = item1;
items[1] = item2;
items[2] = item3;
byte[] bytes = SerializationUtils.serialize(items);
System.out.println("Serialized:\n"+Arrays.toString(bytes));

String[] read = (String[]) SerializationUtils.deserialize(bytes);
System.out.println("Read:");
for(String s : read) {
    System.out.println(s);
}

出力:

[-84, -19, 0, 5, 117, 114, 0, 19, 91, 76, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 83, 116, 114, 105, 110, 103, 59, -83, -46, 86, -25, -23, 29, 123, 71, 2, 0, 0, 120, 112, 0, 0, 0, 3, 116, 0, 7, 110, 117, 109, 98, 101, 114, 49, 116, 0, 8, 110, 117, 109, 98, 101, 114, 47, 50, 116, 0, 8, 110, 117, 109, 98, 101, 114, 92, 51]

これは機能しますが、非常に長い文字列を生成するだけでなく、人間が判読できない文字列も生成します。

このパスを人間が読める方法で保存し、コードをできるだけ複雑にしないようにするにはどうすればよいでしょうか?

解決

これは、OstermillerUtilsct_ によって提案された を使用した私のソリューションです (ありがとう!)。

String item1="number1";
String item2="number/2";
String item3="number\\3";
String item4="//number/4\\";
String item5=",num\"ber5,";
String item6="number,6";
String[] items = new String[6];
items[0] = item1;
items[1] = item2;
items[2] = item3;
items[3] = item4;
items[4] = item5;
items[5] = item6;

    System.out.println("Test values");
for(String s : items) {
    System.out.println(s);
}

StringWriter writer = new StringWriter();
CSVPrinter printer = new CSVPrinter(writer);
printer.changeDelimiter('/');
printer.write(items);
System.out.println("Persisted:\n\t"+writer.toString());

String[][] results = CSVParser.parse(writer.toString(), '/');
for (int j=0; j<results[0].length; j++){
    System.out.println(results[0][j]);
}
4

2 に答える 2

2

では、文字列配列を文字列にシリアライズおよびデシリアライズして元に戻したいですか? http://ostermiller.org/utils/CSV.htmlを見てください- 任意の区切り文字を使用して配列をシリアライズおよびデシリアライズできます。

于 2013-09-28T11:17:27.153 に答える
0

JAXB only using annotations would work. Best when you have one container class with a list field. You then get XML.

于 2013-09-28T10:57:58.577 に答える