将String数组转换为字符串返回字符串数组

时间:2015-08-10 15:23:00

标签: java arrays string

我使用Arrays.toString(variable)将字符串数组转换为字符串并将其保存在会话中。现在我想将它转换回字符串数组。我怎么做?

我希望是否有办法以更简单的方式完成它,比如将其解析为字符串数组。

这是字符串的示例。它用逗号分隔。

[Any, Resolved (1), ANS MACH / LEFT MSG (1)]

更新:
我被告知不要使用toString来序列化数组。但由于我正在处理简单的数组,我仍然选择使用它。

4 个答案:

答案 0 :(得分:3)

如果单个字符串本身可能包含逗号后跟空格,那么这是不可行的。多个String []数组可以映射到相同的平面字符串,并且不存在反函数。

但是,您在评论中注意到您的字符串不能包含逗号分隔符。您可以使用","将扁平字符串拆分回原始子字符串。 (逗号,空格)作为分隔符。

支持此功能的API包括标准的Java String.split()方法和Guava的Splitter类。

这是Java split()方法的一个例子:

public static void main(String[] args) {
    String[] strs = new String[] { "Foo", "Bar", "Baz" };

    String joined = Arrays.toString( strs );

    String joinedMinusBrackets = joined.substring( 1, joined.length() - 1);

    // String.split()
    String[] resplit = joinedMinusBrackets.split( ", "); 

    for ( String s : resplit ) {
        System.out.println( s );
    }

}

这是Guava的Splitter课程的一个例子:

public static void main(String[] args) {
    String[] strs = new String[] { "Foo", "Bar", "Baz" };

    String joined = Arrays.toString( strs );

    String joinedMinusBrackets = joined.substring( 1, joined.length() - 1);

    // Guava Splitter class
    List<String> resplitList = Splitter.on( ", " ).splitToList( joinedMinusBrackets );

    for ( String s : resplitList ) {
        System.out.println( s );
    }
}

答案 1 :(得分:1)

我想that's你正在寻找的答案。简而言之,它是关于使用apache codecs进行序列化来编码/解码对象。我不想从另一个答案中复制/粘贴,所以如果有一天链接发生变化,我只会给你代码示例。 这是:

  // serialize
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    new ObjectOutputStream(out).writeObject(yourArray);

 //encode
    String encodeString = new String(Hex.encodeHex(out.toByteArray()));

 // deserialize
    ByteArrayInputStream in = new ByteArrayInputStream(Hex.decodeHex(yourString.toCharArray()));
    String yourArray = Arrays.toString((String[]) new ObjectInputStream(in).readObject());
}
// And then you could use `String#split()` method to convert string to array.

另一个选择是使用类似Gson JSON库的东西,使用Gson,你可以将任何java对象转换为json字符串,然后将其转换回来。示例代码可能如下所示:

//Put an array (or any other object to gson object
Gson gson = new Gson();
String json = gson.toJson(yourArray);

// Retrieve your object from gson
Gson gson = new Gson();
Array array = gson.fromJson(json, Array.class);

有关详细信息,请查看this文章。

答案 2 :(得分:0)

最简单的解决方案(假设我们正在讨论Java EE&#39; HttpSession)将不会放置String表示数组,而是通过setAttribute(String name, Object value)放置数组本身,如您所见{ {1}}可以是任何value,而不仅仅是Object

使用String代替List<String>进行演示(可能不完美但应该明白):

String[]

答案 3 :(得分:-1)

如果您总是希望使用此类字符串操作split(),那么您需要:

public static void main(String []args){
    String string = "[Any, Resolved (1), ANS MACH / LEFT MSG (1)]";
    String[] parts = string.split(",");// your string Array
    int i=0;

    for(; i< parts.length; i++)
        System.out.println(parts[i]);
 }

如果您的字符串也包含[]。然后你需要.replace()

使用JSON进行响应/请求处理的最佳做法。