【问题标题】:Adding an "or" to string在字符串中添加“或”
【发布时间】:2011-11-14 14:53:27
【问题描述】:
Class person{

  int name;

};

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

我需要连接数组列表中对象的所有名称(成员变量),用“或”分隔。

我尝试了一些在每个连接末尾添加“或”的传统方法, 从字符串末尾删除一个“或”。 我知道这不是一个好的编程。

【问题讨论】:

  • 为什么不呢?如果可行...另一种方法是在循环中使用索引并每次检查它是否是最后一个。如果是最后一个条目,请不要添加“或”。
  • 谁的名字有编号?
  • @AshBurlaczenko 可能是一些标识符。听起来他正在构建一个查询,可能是 SQL。
  • @AshBurlaczenko,我的一个朋友把他的名字改成了“四”。在罗马历史的某些时期,除了第一个儿子以外,其他儿子的名字通常会反映他们的出生顺序,例如Secundus.

标签: java string arraylist


【解决方案1】:

这确实是要走的路。我假设你有一个数组列表,因为你标记了它,你可以使用:

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 ");

【讨论】:

  • 清洁解决方案,善用hasNext。可能想使用 StringBuilder 而不是 StringBuffer,因为并发不是问题。
【解决方案2】:

很多语言都有一个方便的函数,叫做“join”。对于 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.

【讨论】:

    【解决方案3】:
    String separator = "";
    StringBuilder sb = new StringBuilder();
    
    for (Person person : listOfPersons) {
      sb.append(separator).append(person.getName());
      separator = " OR ";
    }
    

    【讨论】:

      【解决方案4】:

      没有对应的 String.split, join。虽然有 org.apache.commons.lang.StringUtils.join。自己做,使用 StringBuilder。在构造函数中,您可以猜测初始容量。在循环中检查长度()!= 0,或者在循环之后删除或设置长度。然后可能是 trimToSize。实际问题是,问题解决方案本身远非最优。但这就是生活。

      在 SQL 中,"name IN(..., ...)" 代替 OR 也是可行的。

      【讨论】:

        猜你喜欢
        • 2013-07-04
        • 2011-04-29
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-20
        相关资源
        最近更新 更多