0

私はArrayListを持っています。誰をStringに変換しますか

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

今、クッキーの値を取得すると文字列を取得しますが、それを 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に再度変換できますか? ありがとうございました。

4

3 に答える 3

3

ArrayListオブジェクトである限り、シングルを解析してリストを再作成Stringできる小さなメソッドを作成できるはずです。StringtoStringは次のArrayListようになります。

"[foo, bar, baz]"

したがって、その文字列が変数valueにある場合、次のようにすることができます。

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これは通常、有効なアプローチではありません。その場合は、質問を更新する価値があります。

于 2012-04-17T06:44:12.507 に答える
3

someList.toString()データをシリアル化する適切な方法ではなく、問題が発生します。

String として Cookie に格納する必要があるため、JSON または XML を使用します。google-gsonはあなたにとって良いライブラリかもしれません:

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);
于 2012-04-17T06:35:50.670 に答える
0

値 を保持するオブジェクトを作成する必要がある代わりに、Stringを直接キャストすることはできません。ArrayListArrayListString

以下のコードの一部を変更する必要があります。

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

に:

ArrayList<String> userCredentialsList = ( ArrayList<Strnig> ) session.getAttribute( attributeName );
if ( userCredentialsList == null ) {
    userCredentialsList = new ArrayList<String>( 10 );
    session.setAttribute(attributeName, userCredentialsList);
}

userCredentialsList.add( value );
于 2012-04-17T06:41:54.320 に答える