Подтвердить что ты не робот

Объединение элементов в массив со строкой

Я немного смущен. Я не мог найти ответ нигде; (

У меня есть массив String:

String[] arr = ["1", "2", "3"];

то я преобразую его в строку:

String str = Arrays.toString(arr);
System.out.println(str);

Я ожидал получить строку "123", но вместо этого я получил строку "[1,2,3]".

Как я могу сделать это в java? Я использую Eclipse IDE

4b9b3361

Ответ 1

Используйте StringBuilder вместо StringBuffer, потому что он быстрее, чем StringBuffer.

Пример кода

String[] strArr = {"1", "2", "3"};
StringBuilder strBuilder = new StringBuilder();
for (int i = 0; i < strArr.length; i++) {
   strBuilder.append(strArr[i]);
}
String newString = strBuilder.toString();

Вот почему это лучшее решение для использования конкатенации строк: когда вы объединяете 2 строки, создается новый строковый объект и выполняется копирование символа по символу.
Эффективно означает, что сложность кода будет порядком квадрата размера вашего массива!

(1+2+3+ ... n, который является количеством символов, скопированных на итерацию). StringBuilder выполнил бы "копирование в строку" только один раз в этом случае, уменьшив сложность до O(n).

Ответ 2

Arrays.toString(arr);

выводится [1,2,3], и вы сохраняете его в своей строке. и распечатайте его, чтобы получить выход [1,2,3].

Если вы хотите получить выход 123, попробуйте следующее:

public static void main(String[] args) {
    String[] arr= {"1","2","3"};
    String output ="";
    for(String str: arr)
        output=output+str;
    System.out.println(output);


}

Вывод:

123

Ответ 3

Простой ответ:

Arrays.toString(arr);

Ответ 4

Arrays.toString: (из API, по крайней мере, для версии Object[])

public static String toString(Object[] a) {
    if (a == null)
        return "null";
    int iMax = a.length - 1;
    if (iMax == -1)
        return "[]";

    StringBuilder b = new StringBuilder();
    b.append('[');
    for (int i = 0; ; i++) {
        b.append(String.valueOf(a[i]));
        if (i == iMax)
            return b.append(']').toString();
        b.append(", ");
    }
}

Итак, это означает, что он вставляет [ в начале, ] в конце и , между элементами.

Если вы хотите его без этих символов: (StringBuilder быстрее, чем ниже, но это не может быть небольшой код)

String str = "";
for (String i:arr)
  str += i;
System.out.println(str);

Боковое примечание:

String[] arr[3]= [1,2,3] не будет компилироваться.

Предположительно вы хотели: String[] arr = {"1", "2", "3"};

Ответ 5

Используйте функцию Arrays.toString(). Он держит ваш код коротким и читаемым. Он использует построитель строк внутри, таким образом, он также эффективен. Чтобы избавиться от лишних символов, вы можете исключить их с помощью функции String.replace(), которая, правда, уменьшает читаемость снова.

String str = Arrays.toString(arr).replaceAll(", |\\[|\\]", "");

Это похоже на ответ Триса Неззгера, но без длинной конструкции подстроки, чтобы избавиться от квадратных скобок.

Объяснение регулярного выражения: "|" означает любые "," и "[" и "]". "\\" сообщает Java String, что мы не имеем в виду специальный символ (например, новую строку "\n" или вкладку "\ t" ), а реальную обратную косую черту "\". Поэтому вместо "\\ [" интерпретатор Regex читает "\ [", который говорит ему, что мы имеем в виду буквенную квадратную скобку и не хотим использовать его как часть языка Regex (например, "[^ 3] *" обозначает любое количество символов, но ни один из них не должен быть "3" ).

Ответ 6

Guava имеет утилиту Joiner для решения этой проблемы:

Пример:

String joinWithoutSeparator = Joiner.on("").join(1, 2, 3); // returns "123"
String joinWithSeparator = Joiner.on(",").join(1, 2, 3); // returns "1,2,3"

Ответ 7

Я только что написал следующее:

public static String toDelimitedString(int[] ids, String delimiter)
{
    StringBuffer strb = new StringBuffer();
    for (int id : ids)
    {
      strb.append(String.valueOf(id) + delimiter);
    }
    return strb.substring(0, strb.length() - delimiter.length());
 }

Ответ 8

Сделайте это java 8-way только в одной строке:

String.join("", arr);

Ответ 9

Arrays.toString форматирует вывод (добавляет скобки и запятые). вы должны реализовать свой собственный метод toString.

public String toString(String[] arr){
    String result = "";
    for(String s : arr)
        result+=s;
    return result;
}

[edit] Stringbuilder лучше. см. выше.

Ответ 11

Использование Guava Joiner (которое в r18 внутренне использует StringBuilder)

String[]  arr= {"1","2","3"};
Joiner noSpaceJoiner = Joiner.on("");
noSpaceJoiner.join(arr))

Joiner полезен, поскольку он является потокобезопасным и неизменным и может быть повторно использован во многих местах без дублирования кода. По-моему, это также более читаемо.


Используя поддержку Java 8 Stream, мы также можем уменьшить это до однострочного.

String concat = Stream.of(arr).collect(Collectors.joining());

Оба выхода в этом случае: 123

Ответ 12

Это небольшой код для преобразования строкового массива в строку без [ или ] или ,

String[] strArray = new String[]{"Java", "String", "Array", "To", "String", "Example"};

String str = Arrays.toString(strArray);
            str = str.substring(1, str.length()-1).replaceAll(",", "");
  • Сначала преобразуйте массив в строку.
  • Вторые получают текст из позиции x в y.
  • третий замените все ',' на ""

Ответ 14

Класс объекта имеет метод toString. Все остальные классы, расширяющие его, переопределяют метод toString, поэтому для массивов также toString переопределяется таким образом. Поэтому, если вы хотите, чтобы ваш результат был на вашем пути, вам нужно создать свой собственный метод, с помощью которого вы получите желаемый результат.

str="";
for (Integer i:arr){
     str+=i.toString();
}

Надеюсь, что это поможет

refer Почему метод toString в java не работает для массива

Ответ 15

Вот как это сделать:   Arrays.toString(array).substring(1, (3 * array.length-1)). ReplaceAll ( ",", "");

Вот демонстрационный класс:

package arraytostring.demo;

import java.util.Arrays;

public class Array2String {

        public static void main(String[] args) {

                String[] array = { "1", "2", "3", "4", "5", "6", "7" };
                System.out.println(array2String(array));
                // output is: 1234567
        }

        public static String array2String(String[] array) {

                return Arrays.toString(array).substring(1, (3 * array.length - 1))
                                .replaceAll(", ", "");

        }

}

Scala делает это проще, чище и безопаснее:

scala> val a = Array("1", "2", "3")
a: Array[String] = Array(1, 2, 3)

scala> val aString = a.mkString
aString: String = 123

scala> println(aString)
123

Ответ 16

Для тех, кто разрабатывает Android, используйте TextUtils.

String items = TextUtils.join("", arr);

Предполагая, что arr имеет тип String[] arr= {"1","2","3"};

Выход будет 123

Ответ 17

Arrays.toString() может использоваться для преобразования String Array в String. Дополнительные символы можно удалить с помощью выражений Regex или просто с помощью метода replace.

Arrays.toString(strArray).replace(",", "").replace("[", "").replace("]", "");

Ответ 18

Пример использования Java 8.

  String[] arr = {"1", "2", "3"};
  String join = String.join("", arr);

Я надеюсь, что это поможет

Ответ 19

String newString= Arrays.toString(oldString).replace("[","").replace("]","").replace(",","").trim();