Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将ArrayList的字符串表示形式转换为ArrayList_Java - Fatal编程技术网

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

Java 如何将ArrayList的字符串表示形式转换为ArrayList,java,Java,我有一个ArrayList,我将其转换为字符串 ArrayList str = (ArrayList) retrieveList.get(1); ... makeCookie("userCredentialsCookie", str.toString(), httpServletResponce); .... private void makeCookie(String name, String value, HttpServletResponse response) { Cook

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

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的格式

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? 谢谢。

someList.toString()
不是序列化数据的正确方法,会给您带来麻烦

因为需要将其作为字符串存储在cookie中,所以请使用JSON或XML。可能对您来说是一个很好的库:

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);
someList.toString()
不是序列化数据的正确方法,会给您带来麻烦

因为需要将其作为字符串存储在cookie中,所以请使用JSON或XML。可能对您来说是一个很好的库:

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

您不能直接将
字符串
强制转换为
数组列表
,而是需要创建一个
数组列表
对象来保存
字符串

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

ArrayList userCredntialsList = (ArrayList)value;  //Need String to ArrayList 
session.setAttribute(attributeName, userCredntialsList);
致:

ArrayList userCredentialsList=(ArrayList)session.getAttribute(attributeName);
if(userCredentialsList==null){
userCredentialsList=newarraylist(10);
setAttribute(attributeName,userCredentialsList);
}
userCredentialsList.add(值);

您不能直接将
字符串
强制转换为
数组列表
,而是需要创建一个
数组列表
对象来保存
字符串

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

ArrayList userCredntialsList = (ArrayList)value;  //Need String to ArrayList 
session.setAttribute(attributeName, userCredntialsList);
致:

ArrayList userCredentialsList=(ArrayList)session.getAttribute(attributeName);
if(userCredentialsList==null){
userCredentialsList=newarraylist(10);
setAttribute(attributeName,userCredentialsList);
}
userCredentialsList.add(值);

只要它是
字符串
对象的
数组列表
,您就应该能够编写一个小方法来解析单个
字符串
,以重新创建列表。
ArrayList
toString
如下所示:

"[foo, bar, baz]"
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"
因此,如果该字符串在变量
值中
,则可以执行以下操作:

"[foo, bar, baz]"
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"
String debracketed=value.replace(“[”,”).replace(“]”,”);//现在是“foo,bar,baz”
String trimmed=debracketed.replaceAll(“\\s+”,”);//现在是“foo,bar,baz”
ArrayList list=新的ArrayList(Arrays.asList(trimmed.split(“,”));//现在有一个包含“foo”、“bar”和“baz”的ArrayList
注意,这是未经测试的代码


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

只要它是
字符串对象的
数组列表
,您就应该能够编写一个小方法来解析单个
字符串
,以重新创建列表。
ArrayList
toString
如下所示:

"[foo, bar, baz]"
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"
因此,如果该字符串在变量
值中
,则可以执行以下操作:

"[foo, bar, baz]"
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"
String debracketed=value.replace(“[”,”).replace(“]”,”);//现在是“foo,bar,baz”
String trimmed=debracketed.replaceAll(“\\s+”,”);//现在是“foo,bar,baz”
ArrayList list=新的ArrayList(Arrays.asList(trimmed.split(“,”));//现在有一个包含“foo”、“bar”和“baz”的ArrayList
注意,这是未经测试的代码


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

这实际上取决于arraylist的内容!您考虑过JSON吗?考虑JSON编码和解码它。编辑:伟人所见略同。我如何将JSON用于ArrayList。实际上,当用户登录时,我会使用如下内容
arrayliststr=(ArrayList)retrieveList.get(1);setAttribute(“getusercredentials”,str);makeCookie(“userCredentialsCookie”,str.toString(),HttpServletResponse)但若用户关闭浏览器,并且超时时间还并没有过期,那个么我使用cookie值再次将其设置为会话。我如何在这里使用JSON?谢谢,这完全取决于arraylist的内容!您考虑过JSON吗?考虑JSON编码和解码它。编辑:伟人所见略同。我如何将JSON用于ArrayList。实际上,当用户登录时,我会使用如下内容
arrayliststr=(ArrayList)retrieveList.get(1);setAttribute(“getusercredentials”,str);makeCookie(“userCredentialsCookie”,str.toString(),HttpServletResponse)但若用户关闭浏览器,并且超时时间还并没有过期,那个么我使用cookie值再次将其设置为会话。我如何在这里使用JSON?谢谢你说的可序列化是什么意思?请阅读上述评论plz,thanks@Basit,请忽略前面关于
Serializable
的注释-您将无法使用它,因为您需要在cookie上存储字符串。还添加了一个如何在my edit.HHmm中使用Gson库的示例。您的意思是说我应该从ArrayList中获取值,然后将这些值设置为Cookie,然后再次从Cookie中获取所有值,然后从中生成ArrayList,并将其设置为session?它是?因为您使用了
retrieveList.get(0)
。意味着您正在从列表中获取内容并将其转换为JSON?我说的对吗?@Basit,这是一个输入错误,是为了遵循您的原始代码(:这个想法是Gson将为您保存整个ArrayList to/from字符串,所以您不需要