Class person{
int name;
};
我在这里有一个场景,我正在从一个arraylist中解析一组Person对象。
我需要连接arraylist中由“or”分隔的对象的所有名称(成员变量)。
我尝试过在每个连接结束时添加“或”的常规方法 从字符串的末尾删除一个“或”。 我知道这不是一个好的编程。
答案 0 :(得分:4)
这确实是要走的路。我假设你有一个arraylist,因为你标记它,你可以使用:
public static String join(Collection data, String delimiter) {
final StringBuffer buffer = new StringBuffer();
final Iterator iter = data.iterator();
while (iter.hasNext()) {
buffer.append(iter.next());
if (iter.hasNext()) {
buffer.append(delimiter);
}
}
return buffer.toString();
}
// in your code:
join(personList, " or ");
答案 1 :(得分:3)
许多语言都有一个称为“加入”的便捷功能。对于Java,您可以在apache commons-lang StringUtils class中使用实现。所以传入:
StringUtils.join(new String[]{"a", "b", "c"}, ":");
将返回
"a:b:c"
此方法有多种变体可以处理集合和数组。
您可以使用commons-collection的CollectionUtils.collect方法从Persons获取名称,然后将它们传递给join。
使用Guava而不是apache commons可能是个好主意。 Guava has equivalent functionality here.
答案 2 :(得分:1)
String separator = "";
StringBuilder sb = new StringBuilder();
for (Person person : listOfPersons) {
sb.append(separator).append(person.getName());
separator = " OR ";
}
答案 3 :(得分:0)
String.split,join没有对应的。但是有org.apache.commons.lang.StringUtils.join。自己动手,使用StringBuilder。在构造函数中,您可以猜出初始容量。检查长度()!= 0的循环,或循环后删除或setLength。然后可能是trimToSize。事实上的问题是问题解决方案本身远非最优。但这就是生活。
在SQL中,“名称IN(...,...)”也是可行的,而不是OR。