Я хочу присоединиться к String[] с помощью строки клея. Есть ли функция для этого?
Java: функция для массивов, таких как PHP join()?
Ответ 1
Начиная с  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, !
Ответ 2
Если вы искали, что использовать в android, это:
String android.text.TextUtils.join(CharSequence delimiter, Object[] tokens)
например:
String joined = TextUtils.join(";", MyStringArray);
Ответ 3
В Java 8 вы можете использовать
1) Stream API:
String[] a = new String[] {"a", "b", "c"};
String result = Arrays.stream(a).collect(Collectors.joining(", "));
2) новый метод String.join: fooobar.com/questions/17835/...
3) java.util.StringJoiner class: http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html
Ответ 4
Вы можете легко написать такую функцию примерно в десяти строках кода:
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();
}
Ответ 5
Небольшой mod вместо использования 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();
}
Ответ 6
Как и во многих вопросах в последнее время, 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, !"
Ответ 7
Google guava library также имеет этот вид возможностей. Вы также можете увидеть пример 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|
Ответ 8
Дано:
String[] a = new String[] { "Hello", "World", "!" };
Затем в качестве альтернативы ответу на coobird, где клей ",":
Arrays.asList(a).toString().replaceAll("^\\[|\\]$", "")
Или объединить другую строку, например "& amp;".
Arrays.asList(a).toString().replaceAll(", ", " & ").replaceAll("^\\[|\\]$", "")
Однако... этот ТОЛЬКО работает, если вы знаете, что значения в массиве или списке НЕ содержат символьную строку ",".
Ответ 9
Если вы используете Spring Framework, то у вас есть класс StringUtils:
import static org.springframework.util.StringUtils.arrayToDelimitedString;
arrayToDelimitedString(new String[] {"A", "B", "C"}, "\n");
Ответ 10
Не в ядре, нет. Поиск "java array join string glue" даст вам некоторые фрагменты кода о том, как это сделать.
например.
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();
}
Ответ 11
Если вы приземлились здесь для быстрого преобразования строк в строку, попробуйте Arrays.toString().
Создает строковое представление переданного
Object[]. В результате окруженный скобками ("[]"), каждый элемент преобразуется в строку черезString.valueOf(Object)и разделен на", ". Если массивnull, возвращается"null".
Ответ 12
Только для задачи "У меня самая короткая", вот мины;)
Итерационный:
public static String join(String s, Object... a) {
    StringBuilder o = new StringBuilder();
    for (Iterator<Object> 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)));
}
Ответ 13
Ничего встроенного, о котором я знаю.
Apache Commons Lang имеет класс под названием StringUtils, который содержит много функций соединения.
Ответ 14
Вот как я это делаю.
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();
}
Ответ 15
Аналогичная альтернатива
/**
 * @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();
}
Ответ 16
Мой спин.
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, "");
}
Ответ 17
Вам нравится мой 3-строчный способ, используя только методы класса String?
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());
}
Ответ 18
Чтобы получить "str1, str2" от "str1", "str2", "":
Stream.of("str1", "str2", "").filter(str -> !str.isEmpty()).collect(Collectors.joining(", ")); 
Также вы можете добавить дополнительную проверку нумерации
Ответ 19
Если вы используете функциональную Java-библиотеку и по какой-то причине не можете использовать Streams из Java 8 (что может иметь место при использовании Android + Retrolambda plugin), вот вам функциональное решение:
String joinWithSeparator(List<String> items, String separator) {
    return items
            .bind(id -> list(separator, id))
            .drop(1)
            .foldLeft(
                    (result, item) -> result + item,
                    ""
            );
}
Обратите внимание, что это не самый эффективный подход, но он работает хорошо для небольших списков.
Ответ 20
Я делаю это с помощью 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)
Ответ 21
Существует простая сокращенная техника, которую я использую большую часть времени.
String op = new String;
for (int i : is) 
{
    op += candidatesArr[i-1]+",";
}
op = op.substring(0, op.length()-1);
Ответ 22
java.util.Arrays имеет метод asList. Вместе с API java.util.List/ArrayList это дает вам все, что вам нужно:;
private static String[] join(String[] array1, String[] array2) {
    List<String> list = new ArrayList<String>(Arrays.asList(array1));
    list.addAll(Arrays.asList(array2));
    return list.toArray(new String[0]);
}
