首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将ArrayList的字符串表示形式转换为ArrayList

如何将ArrayList的字符串表示形式转换为ArrayList
EN

Stack Overflow用户
提问于 2012-04-17 14:28:39
回答 3查看 3.2K关注 0票数 0

我有一个ArrayList,我将其转换为字符串,如

代码语言:javascript
运行
复制
ArrayList str = (ArrayList) retrieveList.get(1);
...

makeCookie("userCredentialsCookie", str.toString(), httpServletResponce);
....

private void makeCookie(String name, String value, HttpServletResponse response) {

    Cookie cookie = new Cookie(name, value);
    cookie.setPath("/");
    response.addCookie(cookie);

} //end of makeCookie()

现在,当我检索Cookie值时,我得到了字符串,但我再次希望将其转换为ArrayList,如下所示

代码语言:javascript
运行
复制
private void addCookieValueToSession(HttpSession session, Cookie cookie, String attributeName) {       
    if (attributeName.equalsIgnoreCase("getusercredentials")) {

        String value = cookie.getValue();
        ArrayList userCredntialsList = (ArrayList)value;  //Need String to ArrayList 
        session.setAttribute(attributeName, userCredntialsList);
        return;
    }

    String value = cookie.getValue();
    session.setAttribute(attributeName, value);

} //end of addCookieValueToSession

如何再次将其转换为ArrayList?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-17 14:35:51

someList.toString()不是序列化数据的适当方式,而且会给您带来麻烦。

由于您需要将其作为字符串存储在cookie中,因此请使用JSON或XML。google-gson可能是一个很好的库:

代码语言:javascript
运行
复制
ArrayList str = (ArrayList) retrieveList.get(1);
String content = new Gson().toJson(str);
makeCookie("userCredentialsCookie", content, httpServletResponce);
//...
ArrayList userCredntialsList = new Gson().fromJson(cookie.getValue(), ArrayList.class);
票数 3
EN

Stack Overflow用户

发布于 2012-04-17 14:44:13

只要它是String对象的ArrayList,您就应该能够编写一个小方法,该方法可以解析单个String以重新创建列表。ArrayListtoString将如下所示:

代码语言:javascript
运行
复制
"[foo, bar, baz]"

因此,如果该字符串在变量value中,则可以执行以下操作:

代码语言:javascript
运行
复制
String debracketed = value.replace("[", "").replace("]", ""); // now be "foo, bar, baz"
String trimmed = debracketed.replaceAll("\\s+", ""); // now is "foo,bar,baz"
ArrayList<String> list = new ArrayList<String>(Arrays.asList(trimmed.split(","))); // now have an ArrayList containing "foo", "bar" and "baz"

请注意,这是未经测试的代码。

此外,如果您的原始ArrayList不是String的列表,而是一个ArrayList<MyDomainObject>,那么这种方法将不起作用。为此,您应该找到如何正确序列化/反序列化您的对象- toString通常不是一个有效的方法。如果是这样的话,更新这个问题是值得的。

票数 3
EN

Stack Overflow用户

发布于 2012-04-17 14:41:54

您不能直接将String转换为ArrayList,而是需要创建一个ArrayList对象来保存String值。

您需要更改以下代码的一部分:

代码语言:javascript
运行
复制
ArrayList userCredntialsList = (ArrayList)value;  //Need String to ArrayList 
session.setAttribute(attributeName, userCredntialsList);

至:

代码语言:javascript
运行
复制
ArrayList<String> userCredentialsList = ( ArrayList<Strnig> ) session.getAttribute( attributeName );
if ( userCredentialsList == null ) {
    userCredentialsList = new ArrayList<String>( 10 );
    session.setAttribute(attributeName, userCredentialsList);
}

userCredentialsList.add( value );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10186220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档