我需要将字符串列表存储到 Java 中的单个字段中。顺序很重要,我希望它以人类可读的格式存储。
完美的解决方案是将其存储为 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]
这可行,但除了生成一个很长的字符串之外,它还会生成一个非人类可读的字符串。
我怎样才能最好地以人类可读的方式存储这条路径,并且在我的代码中尽可能少地复杂化?
解决方案
这是我使用OstermillerUtils
ct_ 建议的解决方案(谢谢!)。
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]);
}