我的要求是我必须在我的类中编写一个java方法,它接受List<String>
作为参数。现在我必须连接
public String encode(List<String> ls){
StringBuffer sb = new StringBuffer();
ListIterator<String> lis = ls.listIterator();
while(lis.hasNext()){
sb.append(lis.next());
/*my code here
* sb.append(lis.next());
* sb.append(some delim);
*
*
*/
}
//my code here
return sb.toString();
}
现在List中的那些String可以包含任何值(char / num / special char等),所以我不能使用像,/:/;
等常用分隔符。请建议我进行连接的方法。
另外,我可能需要为我的不同方法拆分相同的连接字符串。所以我需要使用一些分隔符或其他选项,以后可以再次使用它来创建列表。
答案 0 :(得分:0)
这可能不太理想,但实现此目的的一种方法是通过随机短语连接。所以当你迭代时,你在每个字符串之间附加额外的短语或单词..以后你将该短语用作分隔符..
答案 1 :(得分:0)
首先,如果您只是序列化要存储/传输的对象,请不要。使用@Serializable注释,让Java Serializing API为您处理。
如果你必须将一个转换列表转换为字符串然后自己回来,因为原因,我建议使用一个不常见的分隔符(一组像<|>
这样的字符)或者为了更安全,使用一个uuid分隔符和用它开始你的字符串,这样你就可以识别它(比如<uuid>
)。根据定义,特定的uuid不应出现在您收到的任何列表中。 (除非你重复使用uuid并违反合同)UUID方式将是安全的,即使在处理列表列表时(因此你不必逃避分隔符或做一些疯狂的事情)。仅使用<|>
或,
作为分隔符然后在转换为/来自字符串时将其编码/解码为其他内容会更便宜。 (如果表现真的很重要)
最后,我只想说......
public String encode(List<String> ls){
StringBuffer sb = new StringBuffer();
String delim = getDelimiter();
for(String s : ls){
sb.append(lis.next());
sb.append(delim);
}
return sb.toString();
}
简单得多。除非你需要(只是为了保持简单),否则不要费心去获取迭代器,如果你确实需要使用迭代器,请确保在阅读“next”之前始终检查“hasNext”。