在字符串中添加“或”

时间:2011-11-14 14:53:27

标签: java string arraylist

Class person{

  int name;

};

我在这里有一个场景,我正在从一个arraylist中解析一组Person对象。

我需要连接arraylist中由“or”分隔的对象的所有名称(成员变量)。

我尝试过在每个连接结束时添加“或”的常规方法 从字符串的末尾删除一个“或”。 我知道这不是一个好的编程。

4 个答案:

答案 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。