Существует ли служебный метод для разделения списка по заданной строке?
Есть ли что-то вроде следующего в 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);
3 ответа:
Вы можете использовать
StringUtils.join(Object[] array, String delimiter)
(от commons-lang) следующим образом:String enumeratedList = StringUtils.join(list.toArray(), ", ");
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)); } }
Это довольно тривиально, если вы не хотите зависимости от commons-lang. Также не очень хорошо преобразовать список в массив, просто чтобы снова соединить его в строку. Вместо этого просто повторите свою коллекцию. Еще лучше, чем использование коллекции, использовать 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