Добавление "или" к строке - PullRequest
2 голосов
/ 14 ноября 2011
Class person{

  int name;

};

У меня есть сценарий, в котором я анализирую набор объектов Person из массива.

Мне нужно объединить все имена (переменные-члены) для объектов в массиве, разделенных символом "или".

Я пробовал несколько обычных способов добавления "или" в конце каждой конкатенации и удаления одного "или" из конца строки.Я знаю, что это не очень хорошее программирование.

Ответы [ 4 ]

4 голосов
/ 14 ноября 2011

это действительно путь.Я предполагаю, что у вас есть 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 ");
3 голосов
/ 14 ноября 2011

У многих языков есть удобная функция под названием «соединение». Для Java есть реализация, которую вы можете использовать в классе apache commons-lang *1002*. Проходя так:

StringUtils.join(new String[]{"a", "b", "c"}, ":");

вернется

"a:b:c"

Существуют варианты этого метода, которые обрабатывают как коллекции, так и массивы.

Вы можете получить имена от Persons, используя метод CollectionUtils.collect коллекции commons, а затем передать их в соединение.

Вероятно, будет хорошей идеей использовать гуаву вместо общих Apache. Guava имеет эквивалентную функциональность здесь.

1 голос
/ 14 ноября 2011
String separator = "";
StringBuilder sb = new StringBuilder();

for (Person person : listOfPersons) {
  sb.append(separator).append(person.getName());
  separator = " OR ";
}
0 голосов
/ 14 ноября 2011

Нет аналога String.split, присоединяйтесь. Хотя есть org.apache.commons.lang.StringUtils.join. Делая это самостоятельно, используйте StringBuilder. В конструкторе вы могли угадать начальную емкость. Либо проверьте в цикле на length ()! = 0, либо после цикла удалите или setLength. И тогда возможно trimToSize. Фактическая проблема заключается в том, что само решение проблемы далеко от оптимального. Но это жизнь.

В SQL было бы возможно использовать имя IN (..., ...) вместо ИЛИ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...