Ява: функции для массивов, таких как PHP'ы присоединяйтесь к()?

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

Комментарии к вопросу (2)
Решение

Начиная с Java8 можно использовать строки.присоединяйтесь к()`.

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

Генерирует:

Hello, World, !

В противном случае, Апач Викискладе Ланг имеет StringUtils класс, который имеет [присоединиться] функция3, который вступит массивы вместе, чтобы сделать эту строку.

Например:

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

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

Hello, World, !
Комментарии (7)

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

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

например:

String joined = TextUtils.join(";", MyStringArray);
Комментарии (2)

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

  1. API-интерфейс потока :
String[] a = new String[] {"a", "b", "c"};
String result = Arrays.stream(a).collect(Collectors.joining(", "));
  1. новую строку.метод соединения: https://stackoverflow.com/a/21756398/466677

  2. Ява.утиль.StringJoiner класс: http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html

Комментарии (0)

Можно легко написать такую функцию в около десяти строк кода:

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();
}
Комментарии (21)

Небольшой мод, а не с помощью метода 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
Комментарии (2)

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


В Java 8 добавили новый статический метод Ява.яз.Строка, который делает именно то, что вы хотите:

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

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

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

Результаты в:

"Hello, World, !"
Комментарии (0)

Компания Google гуава'библиотека s также имеет такая возможность. Вы можете увидеть строку[] пример из API.

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

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

Пример от меня :

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

выводит : |я кодер|

Комментарии (0)

Если вы используете Весна рамки тогда у вас есть StringUtils класс:

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

arrayToDelimitedString(new String[] {"A", "B", "C"}, "\n");
Комментарии (0)

Дано:

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

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

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

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

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

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

Комментарии (1)

Не в ядро, нет. Поиск на "массив 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();
}
Комментарии (3)

Если вы'вэ приземлился здесь ищете быстрый массив для преобразования строк, попробуйте массивы.метод toString().

создает строковое представление объекта [] прошло. Результат В окружении скобок (в"[]" в), каждый элемент преобразуется в строку через строку.метод valueOf(объекта) и разделены в ", то ". Если массив нуль, затем в `"нуль" и возвращается.

Комментарии (1)

в

Только на "Я'вэ самый короткий и" вызов, здесь мины ;)

Итерационный:

public static String join(String s, Object... a) {
    StringBuilder o = new StringBuilder();
    for (Iterator i = Arrays.asList(a).iterator(); i.hasNext();)
        o.append(i.next()).append(i.hasNext() ? s : "");
    return o.toString();
}

Рекурсивно:

public static String join(String s, Object... a) {
    return a.length == 0 ? "" : a[0] + (a.length == 1 ? "" : s + join(s, Arrays.copyOfRange(a, 1, a.length)));
}
Комментарии (2)

Ничего не построили-в том, что я знаю.

Апачи Викискладе Ланг имеет класс StringUtils, который содержит многих функций.

Комментарии (0)

Это, как я делаю это.

private String join(String[] input, String delimiter)
{
    StringBuilder sb = new StringBuilder();
    for(String value : input)
    {
        sb.append(value);
        sb.append(delimiter);
    }
    int length = sb.length();
    if(length > 0)
    {
        // Remove the extra delimiter
        sb.setLength(length - delimiter.length());
    }
    return sb.toString();
}
Комментарии (0)

Подобная альтернатива

/**
 * @param delimiter 
 * @param inStr
 * @return String
 */
public static String join(String delimiter, String... inStr)
{
    StringBuilder sb = new StringBuilder();
    if (inStr.length > 0)
    {
        sb.append(inStr[0]);
        for (int i = 1; i < inStr.length; i++)
        {
            sb.append(delimiter);                   
            sb.append(inStr[i]);
        }
    }
    return sb.toString();
}
Комментарии (0)

Моя спина.

public static String join(Object[] objects, String delimiter) {
  if (objects.length == 0) {
    return "";
  }
  int capacityGuess = (objects.length * objects[0].toString().length())
      + ((objects.length - 1) * delimiter.length());
  StringBuilder ret = new StringBuilder(capacityGuess);
  ret.append(objects[0]);
  for (int i = 1; i < objects.length; i++) {
    ret.append(delimiter);
    ret.append(objects[i]);
  }
  return ret.toString();
}

public static String join(Object... objects) {
  return join(objects, "");
}
Комментарии (0)

Тебе нравится мой 3-линии, используя только строковые класс'ы методов?

static String join(String glue, String[] array) {
    String line = "";
    for (String s : array) line += s + glue;
    return (array.length == 0) ? line : line.substring(0, line.length() - glue.length());
}
Комментарии (2)

В случае, если вы're с помощью функционального библиотеки Java и почему может'т использовать потоки в Java 8 (которое может быть в случае, когда с помощью Android + Retrolambda плагин), вот это функциональное решение для вас:

String joinWithSeparator(List items, String separator) {
    return items
            .bind(id -> list(separator, id))
            .drop(1)
            .foldLeft(
                    (result, item) -> result + item,
                    ""
            );
}

Обратите внимание, что он's не самый эффективный подход, но он хорошо работает для небольших списков.

Комментарии (0)

Чтобы попасть на "str1 выглядит следующим образом, стр2" и от "str1 выглядит следующим образом:" с "Ну стр2-то", " на глаз" :

Stream.of("str1", "str2", "").filter(str -> !str.isEmpty()).collect(Collectors.joining(", ")); 

Также вы можете добавить дополнительную null-проверка

Комментарии (0)

Я делаю это с помощью класса StringBuilder:

public static String join(String[] source, String delimiter) {
    if ((null == source) || (source.length < 1)) {
        return "";
    }

    StringBuilder stringbuilder = new StringBuilder();
    for (String s : source) {
        stringbuilder.append(s + delimiter);
    }
    return stringbuilder.toString();
} // join((String[], String)
Комментарии (2)