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