Преобразование массива строк в строку в Java

Мне нужен код Java для преобразования массива строк в строку.

Ответ 1

Если вы просто хотите получить дамп массива в стиле отладки:

String str = Arrays.toString(arr);

или, для большего контроля (до Java 8):

StringBuilder builder = new StringBuilder();
for(String s : arr) {
    builder.append(s);
}
String str = builder.toString();

(Java 8 и выше):

String str = String.join(",", arr);

И если вы идете под углом Android:

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

Вы можете изменить вышеупомянутое в зависимости от того, какие символы, если таковые имеются, вы хотите между строками.

Вы можете увидеть код, идентичный коду до Java 8, но с использованием StringBuffer - StringBuilder - более новый класс, не поточнобезопасный, но, следовательно, имеющий лучшую производительность в одном потоке, потому что он устраняет ненужную синхронизацию. Короче говоря, вам лучше использовать StringBuilder в 99% случаев - по функциональности они идентичны.

НЕ используйте строку и просто добавьте к ней + =, как показано здесь. Это отправляет GC через крышу, потому что вы создаете и выбрасываете столько строковых объектов, сколько у вас есть элементов в вашем массиве. Для небольших массивов вы можете не заметить разницу, но для больших массивов она может быть на несколько порядков медленнее.

Ответ 2

Использовать общие ресурсы Apache StringUtils.join(). Он принимает массив как параметр (а также имеет перегрузки для параметров Iterable и Iterator) и вызывает toString() для каждого элемента (если он не является нулевым) для получения каждого строкового представления элементов. Каждое представление строки элементов затем объединяется в одну строку с разделителем между ними, если один из них указан:

String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);

Выдает:

a-b-1

Ответ 3

Мне нравится использовать Google Guava Joiner для этого, например:

Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");

создаст ту же строку, что и:

new String("Harry, Ron, Hermione");

ETA: Java 8 теперь имеет такую ​​же поддержку:

String.join(", ", "Harry", "Ron", "Hermione");

Невозможно увидеть поддержку пропущенных нулевых значений, но это легко обойти.

Ответ 4

Вы можете сделать это, учитывая массив a примитивного типа:

StringBuffer result = new StringBuffer();
for (int i = 0; i < a.length; i++) {
   result.append( a[i] );
   //result.append( optional separator );
}
String mynewstring = result.toString();

Ответ 5

Из Java 8 самый простой способ:

    String[] array = { "cat", "mouse" };
    String delimiter = "";
    String result = String.join(delimiter, array);

Таким образом вы можете выбрать произвольный разделитель.

Ответ 6

Попробуйте метод Arrays.deepToString.

Возвращает строковое представление "глубокого содержимого" указанного    массив. Если массив содержит другие массивы в качестве элементов, строка    представление содержит их содержимое и т.д. Этот метод    предназначенный для преобразования многомерных массивов в строки

Ответ 7

Попробуйте перегруженные методы Arrays.toString.

Или, попробуйте это ниже общая реализация:

public static void main(String... args) throws Exception {

    String[] array = {"ABC", "XYZ", "PQR"};

    System.out.println(new Test().join(array, ", "));
}

public <T> String join(T[] array, String cement) {
    StringBuilder builder = new StringBuilder();

    if(array == null || array.length == 0) {
        return null;
    }

    for (T t : array) {
        builder.append(t).append(cement);
    }

    builder.delete(builder.length() - cement.length(), builder.length());

    return builder.toString();
}

Ответ 8

Ниже приведен пример преобразования Array в String.

  
    public class ArrayToString
    {
public static void main(String[] args) { String[] strArray = new String[]{"Java", "PHP", ".NET", "PERL", "C", "COBOL"};
        String newString = Arrays.toString(strArray);

        newString = newString.substring(1, newString.length()-1);

        System.out.println("New New String: " + newString);
    }
}

Ответ 9

String[] strings = new String[25000];
for (int i = 0; i < 25000; i++) strings[i] = '1234567';

String result;
result = "";
for (String s : strings) result += s;
//linear +: 5s

result = "";
for (String s : strings) result = result.concat(s);
//linear .concat: 2.5s

result = String.join("", strings);
//Java 8 .join: 3ms

Public String join(String delimiter, String[] s)
{
    int ls = s.length;
    switch (ls)
    {
        case 0: return "";
        case 1: return s[0];
        case 2: return s[0].concat(delimiter).concat(s[1]);
        default:
            int l1 = ls / 2;
            String[] s1 = Arrays.copyOfRange(s, 0, l1); 
            String[] s2 = Arrays.copyOfRange(s, l1, ls); 
            return join(delimiter, s1).concat(delimiter).concat(join(delimiter, s2));
    }
}
result = join("", strings);
// Divide&Conquer join: 7ms

Если у вас нет выбора, но для использования Java 6 или 7, вы должны использовать Divide & Conquer join.

Ответ 10

Вам нужен код, который создает строку из arrayList,

Iterate through all elements in list and add it to your String result

вы можете сделать это двумя способами: используя String в качестве результата или StringBuffer/StringBuilder.

Пример:

String result = "";
for (String s : list) {
    result += s;
}

... но это не очень хорошая практика из-за соображений производительности. Лучше использовать StringBuffer (потоки безопасны) или StringBuilder, которые более подходят для добавления строк

Ответ 11

String array[]={"one","two"};
String s="";

for(int i=0;i<array.length;i++)
{
  s=s+array[i];
}

System.out.print(s);

Ответ 12

 String[] strings = {"a","b","c"};
 List<String> list= new ArrayList<String>(Arrays.asList(strings));

Ответ 13

Используйте метод соединения библиотеки StringUtils Apache Commons.

String[] stringArray = {"a","b","c"};
StringUtils.join(stringArray, ",");

Ответ 14

Если вы знаете, сколько элементов имеет массив, простой способ делает это:

String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3];