Java: функция для массивов, таких как PHP join ()? - PullRequest
252 голосов
/ 04 октября 2009

Я хочу присоединиться к String[] с помощью клейкой нити. Есть ли функция для этого?

Ответы [ 22 ]

307 голосов
/ 04 октября 2009

Начиная с Java8 можно использовать String.join().

String.join(", ", new String[]{"Hello", "World", "!"})

Формирует:

Hello, World, !

В противном случае, Apache Commons Lang имеет класс StringUtils, который имеет функцию join, которая объединит массивы для создания String .

Например:

StringUtils.join(new String[] {"Hello", "World", "!"}, ", ")

Генерирует следующее String:

Hello, World, !
71 голосов
/ 20 февраля 2013

Если вы искали, что использовать в Android, это:

String android.text.TextUtils.join(CharSequence delimiter, Object[] tokens)

например:

String joined = TextUtils.join(";", MyStringArray);
55 голосов
/ 18 марта 2014

В Java 8 вы можете использовать

1) Stream API:

String[] a = new String[] {"a", "b", "c"};
String result = Arrays.stream(a).collect(Collectors.joining(", "));

2) новый метод String.join: https://stackoverflow.com/a/21756398/466677

3) java.util.StringJoiner class: http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html

52 голосов
/ 04 октября 2009

Вы можете легко написать такую ​​функцию примерно в десяти строках кода:

String combine(String[] s, String glue)
{
  int k = s.length;
  if ( k == 0 )
  {
    return null;
  }
  StringBuilder out = new StringBuilder();
  out.append( s[0] );
  for ( int x=1; x < k; ++x )
  {
    out.append(glue).append(s[x]);
  }
  return out.toString();
}
25 голосов
/ 01 января 2012

Небольшой мод вместо использования substring ():

//join(String array,delimiter)
public static String join(String r[],String d)
{
        if (r.length == 0) return "";
        StringBuilder sb = new StringBuilder();
        int i;
        for(i=0;i<r.length-1;i++){
            sb.append(r[i]);
            sb.append(d);
        }
        sb.append(r[i]);
        return sb.toString();
}
18 голосов
/ 04 августа 2014

Как и многие вопросы в последнее время, Java 8 на помощь:


Java 8 добавил новый статический метод к java.lang.String, который делает именно то, что вы хотите:

public static String join(CharSequence delimeter, CharSequence... elements);

Используя его:

String s = String.join(", ", new String[] {"Hello", "World", "!"});

Результаты:

"Hello, World, !"
14 голосов
/ 16 февраля 2012

Библиотека Google guava также имеет такую ​​возможность . Вы можете увидеть пример String [] также из API.

Как уже описано в API, остерегайтесь неизменности методов построения.

Он может принимать массив объектов, поэтому он будет работать в вашем случае. В моем предыдущем опыте я попытался присоединиться к стеку, который является итеративным, и он отлично работает.

Образец от меня:

Deque<String> nameStack = new ArrayDeque<>();
nameStack.push("a coder");
nameStack.push("i am");
System.out.println("|" + Joiner.on(' ').skipNulls().join(nameStack) + "|");

распечатывает: |i am a coder|

9 голосов
/ 05 июля 2012

Если вы используете Spring Framework , то у вас есть класс StringUtils :

import static org.springframework.util.StringUtils.arrayToDelimitedString;

arrayToDelimitedString(new String[] {"A", "B", "C"}, "\n");
9 голосов
/ 12 декабря 2011

Дано:

String[] a = new String[] { "Hello", "World", "!" };

Тогда в качестве альтернативы ответу coobird, где клей ",":

Arrays.asList(a).toString().replaceAll("^\\[|\\]$", "")

Или объединить с другой строкой, например "& amp;".

Arrays.asList(a).toString().replaceAll(", ", " &amp; ").replaceAll("^\\[|\\]$", "")

Однако ... этот ТОЛЬКО работает, если вы знаете, что значения в массиве или списке НЕ содержат символьную строку ",".

8 голосов
/ 04 октября 2009

Не в ядре, нет. Поиск по запросу «соединение строк массива java» покажет вам фрагменты кода о том, как этого добиться.

, например

public static String join(Collection s, String delimiter) {
    StringBuffer buffer = new StringBuffer();
    Iterator iter = s.iterator();
    while (iter.hasNext()) {
        buffer.append(iter.next());
        if (iter.hasNext()) {
            buffer.append(delimiter);
        }
    }
    return buffer.toString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...