我使用Arrays.toString(variable)
将字符串数组转换为字符串并将其保存在会话中。现在我想将它转换回字符串数组。我怎么做?
我希望是否有办法以更简单的方式完成它,比如将其解析为字符串数组。
这是字符串的示例。它用逗号分隔。
[Any, Resolved (1), ANS MACH / LEFT MSG (1)]
更新:
我被告知不要使用toString
来序列化数组。但由于我正在处理简单的数组,我仍然选择使用它。
答案 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
进行响应/请求处理的最佳做法。