2010-03-10 2 views
3

Есть ли что-то вроде следующего в Apache Common Lang или Spring Utils или вы пишете собственный метод Util для этого?Есть ли способ утилиты для разделения списка по заданной строке?

List<String> list = new ArrayList<String>(); 
list.add("moo"); 
list.add("foo"); 
list.add("bar"); 

String enumeratedList = Util.enumerate(list, ", "); 

assert enumeratedList == "moo, foo, bar"; 

Я помню использование implode в PHP, это то, что я ищу для Java.

$array = array('lastname', 'email', 'phone'); 
$comma_separated = implode(",", $array); 

ответ

11

Вы можете использовать StringUtils.join(Object[] array, String delimiter) (от Обще-лана) следующим образом:

String enumeratedList = StringUtils.join(list.toArray(), ", "); 
+0

Спасибо, упускать из виду, что в API. – codevour

+0

Хотя мне нравится решение bozho, я не вижу причин не создавать простой цикл 'for' и делать это самостоятельно (занимает 3-4 строки кода). Я имею в виду, если вы до сих пор не включили в свой проект 'commons-lang', включили бы его только в инструмент, который вы можете написать в течение одной минуты? ;-) – dimitarvp

+5

@dimitko: Потому что 1 строка меньше 3-4. Это более читаемо, менее подвержено ошибкам, и как только вы включите библиотеку, вы можете использовать ее «везде». – whiskeysierra

3

Это довольно тривиально inplement, если вы не хотите, зависимость от Викисклада яз. Также неплохо преобразовать список в массив просто, чтобы снова присоединить его к String. Вместо этого просто перебирайте свою коллекцию. Даже лучше, чем использование Collection, использует Iterable, который обрабатывает все, что может быть итератором (даже некоторый поток или коллекция неизвестной длины).

import java.util.Arrays; 
import java.util.Iterator; 

public class JoinDemo { 
    public static String join(String sep, Iterable<String> i) { 
    StringBuilder sb = new StringBuilder(); 
    for (Iterator<String> it = i.iterator(); it.hasNext();) { 
     sb.append(it.next()); 
     if (it.hasNext()) 
     sb.append(sep); 
    } 
    return sb.toString(); 
    } 

    public static void main(String[] args) { 
    System.out.println(join(",", Arrays.asList(args))); 
    } 
} 

Пример:

# javac JoinDemo.java 
# java JoinDemo a b c 
a,b,c 
4

Google Collections обеспечивает Joiner класс, который может быть использован, как это:

public class Main { 

    public static void main(String[] args) { 
     List<String> list = Lists.newLinkedList(); 
     list.add("1"); 
     list.add("2"); 
     list.add("3"); 
     System.out.println(Joiner.on(", ").join(list)); 
    } 

} 
Смежные вопросы