List <string> list </string>的字符串表示形式

时间:2012-10-13 09:10:42

标签: java guava

我需要序列化或制作字符串表示的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功能可以执行此操作?

7 个答案:

答案 0 :(得分:7)

使用番石榴:

String s = Joiner.on('-').join(Iterables.transform(list, new Function<String, String>() {
    @Override
    public String apply(String input) {
        return "\\" + input + "\\";
    }
});

答案 1 :(得分:6)

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

System.out.println("\\" + Joiner.on("\\-\\").join(myList) + "\\");

答案 2 :(得分:5)

您可以轻松使用Apaches Commons StringUtils

 String ss = "\\" + StringUtils.join(myList.iterator(), "\\-\\") + "\\";

答案 3 :(得分:1)

首先,建议在这种连接过程中使用StringBuilder。

其次,你可以使用Apache Common Lang的StringUtils.join()`方法来实现同样的目的:

ss = "\\" + StringUtils.join(myList.iterator(), "\\-\\") + "\\";

答案 4 :(得分:0)

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

String ss = "";

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

答案 5 :(得分:0)

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

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

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循环(如上所述)最终会更容易阅读。

答案 6 :(得分:0)

我知道的最简单的字符串连接代码是这样的:

String sep = "", out = "";
for (String s : myList) {
  out += sep + '\\' + s + '\\';
  sep = "-";
}