1

我有一个List<String>我需要序列化或制作字符串表示的东西。

例如我有:

myList.add("Bob");
myList.add("account");
myList.add("userId");

该列表可以包含可变数量的项目,我需要以这种形式对其进行序列化:

\Bob\-\account\-\userId\

我可以做一个 for 循环,如:

String ss;

for (String s: myList) {
   s = "\\" + s + "\\";
   ss = s + "-";
}

"-"然而,结果的尾部会有一个String ss

还是已经有 Google Guava 功能可以做到这一点?

4

7 回答 7

7

使用番石榴:

String s = Joiner.on('-').join(Iterables.transform(list, new Function<String, String>() {
    @Override
    public String apply(String input) {
        return "\\" + input + "\\";
    }
});
于 2012-10-13T09:21:04.313 回答
6

使用 Guava 解决这个问题的直接方法是Joiner

System.out.println("\\" + Joiner.on("\\-\\").join(myList) + "\\");
于 2012-10-13T10:01:19.957 回答
5

您可以轻松使用Apaches Commons StringUtils

 String ss = "\\" + StringUtils.join(myList.iterator(), "\\-\\") + "\\";
于 2012-10-13T09:17:24.953 回答
1

首先,建议在此类连接期间使用 StringBuilder。

其次,您可以使用 Apache Common Lang 的 StringUtils.join() 方法,如下所示:

ss = "\\" + StringUtils.join(myList.iterator(), "\\-\\") + "\\";
于 2012-10-13T09:18:05.450 回答
0

您可以通过更改循环来修复它,例如:

String ss = "";

for (String s: myList) {
    s = "\\" + s + "\\";
    if(ss.equals("")) {
        ss = s;
    }
    else {
        ss += " - " + s;
    }
}
于 2012-10-13T09:13:10.760 回答
0

也许其他解决方案是基于 List size() 的老式 for 循环。

我要做的另一件事是使用 StringBuffer,因为它比连接字符串更有效。在内部,当您连接一个字符串时,该对象将被销毁并重新创建。

int myListSize = myList.size();
StringBuffer ss = new StringBuffer(4);
for (int i=0; i < myListSize; i++) {
   ss.append("\\").append(myList.get(i)).append("\\");
   if (i < myListSize - 1) {
      ss.append("-");
   }
}

然后从 StringBuffer 输出:

ss.toString();

我个人认为这些 for 循环(如上)最终更容易阅读。

于 2012-10-13T09:14:55.527 回答
0

我知道的最简单的字符串连接代码如下:

String sep = "", out = "";
for (String s : myList) {
  out += sep + '\\' + s + '\\';
  sep = "-";
}
于 2012-10-13T09:22:58.970 回答