簡體   English   中英

將字符串列表存儲為人類可讀的路徑

[英]Store a list of Strings as human-readable path

我需要將一個字符串列表存儲到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]

這有效,但除了生成一個非常長的String之外,它還會生成一個非人類可讀的字符串。

我怎樣才能以人類可讀的方式最好地存儲這條路徑,並盡可能減少代碼的復雜性?

這是我使用OstermillerUtils建議的OstermillerUtils的解決方案(謝謝!)。

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]);
}

那么你想將String數組序列化和反序列化為字符串並返回? 看看http://ostermiller.org/utils/CSV.html - 它可以使用任意的分隔符序列化和反序列化數組。

僅使用注釋的JAXB才有效。 當你有一個帶有列表字段的容器類時最好。 然后,您獲得XML。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM