用String表示从Java加载List?

时间:2011-07-11 14:24:15

标签: java linked-list

我知道这可以通过编写一个函数轻松完成,但是,我想知道是否有一种快速方便的方法从Java表示形式加载Java中的List。

我将举一个小例子:

List<String> atts = new LinkedList<String>();
atts.add("one"); atts.add("two"); atts.add("three”);
String inString = atts.toString()); //E.g. store string representation to DB
...
//Then we can re-create the list from its string representation?
LinkedLisst<String> atts2 = new LinkedList<String>();

日Thnx!

4 个答案:

答案 0 :(得分:2)

您不希望为此使用toString()。相反,你想使用java的序列化方法。这是一个例子:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(stream);
out.writeObject(list);
stream.close();
// save stream.toByteArray() to db

// read byte
ByteArrayInputStream bytes = ...
ObjectInputStream in = new ObjectInputStream(bytes);
List<String> list = in.readObject();

这是一个更好的解决方案,因为您不必拆分或解析任何内容。您还可以使用其他串行化方法,如json或xml。我上面展示的内容是用Java构建的。

答案 1 :(得分:1)

  

//然后我们可以从字符串表示中重新创建列表吗?

一种选择是同意使用已知格式来转换字符串表示和从字符串表示转换。我会在这里使用CSV,因为除非你的原始字符串中有逗号,否则这样做会更简单。

String csvString = "one,two,three";
List<String> listOfStrings = Arrays.asList(csvString.split(","));

答案 2 :(得分:1)

没有可靠的方法来做到这一点。 Lists的toString()方法并非旨在输出可以可靠地用作序列化列表的方法。

这是不可行的方式。看看你的例子的这个小改动:

public static void main(String[] args) {
    List<String> atts = new LinkedList<String>();
    atts.add("one");
    atts.add("two");
    atts.add("three, four");
    String inString = atts.toString();
    System.out.println("inString = " + inString);
}

此输出

inString = [one, two, three, four]

这看起来像列表包含四个元素。但我们只增加了三个。没有可行的方法来确定原始来源列表。

答案 3 :(得分:-1)

您可以从String表示形式创建List。如果字符串包含“,”或字符串为null,则它可能不完全相同,但您可以这样做,它可以用于许多用例。

List<String> strings = Arrays.asList("one", "two", "three");
String text = strins.asList();
// in this case, you will get the same list.
List<String> strings2=Arrays.asList(text.substring(1,text.length()-1).split(", "));