Konvertieren Sie ein Array von Zeichenfolgen in eine Zeichenfolge in Java


241

Ich möchte den Java-Code zum Konvertieren eines Arrays von Strings in einen String.


Was für ein Array? Array von Strings?
Adarshr

2
array.toString()? Sei genauer.
Stan Kurilin

1
@ Princeyesuraj, die offizielle Antwort liefert adarshr . Wenn Sie ein eigenes Trennzeichen möchten, können Sie die Antwort von JoeSlav ausprobieren. Wenn kein Thread-Problem vorliegt , können Sie aus Effizienzgründen StringBuilder anstelle von StringBuffer verwenden. Die Antwort von krock ist gut, aber meiner Meinung nach ein bisschen übertrieben.
Dante May Code

Antworten:


469

Wenn Sie nur einen "Debug-Stil" -Dump eines Arrays möchten:

String str = Arrays.toString(arr);

oder für mehr Kontrolle (vor Java 8):

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

(Java 8 und höher):

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

Und wenn Sie aus dem Android-Blickwinkel kommen:

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

Sie können die obigen Angaben ändern, je nachdem, welche Zeichen zwischen den Zeichenfolgen gegebenenfalls gewünscht werden.

Möglicherweise sehen Sie nahezu identischen Code wie der Code vor Java 8, verwenden jedoch StringBuffer- StringBuilderist eine neuere Klasse, die nicht threadsicher ist, jedoch eine bessere Leistung in einem einzelnen Thread aufweist, da nicht benötigte Synchronisierungen vermieden werden. Kurz gesagt, Sie verwenden es StringBuilderin 99% der Fälle besser - in Bezug auf die Funktionalität sind beide identisch.

NICHT eine Zeichenfolge verwenden und nur append , um es mit + = wie einige der Antworten hier zeigen. Dadurch wird der GC durch das Dach gesendet, da Sie so viele Zeichenfolgenobjekte erstellen und wegwerfen, wie Sie Elemente in Ihrem Array haben. Bei kleinen Arrays fällt der Unterschied möglicherweise nicht wirklich auf, bei großen kann er jedoch um Größenordnungen langsamer sein.


13
Vielen Dank für die Erklärung, warum StringBuilder + = beim Anhängen überlegen ist.
Nicholas Miller

5
Wenn Sie ein + = unter der Abdeckung verwenden, konvertiert Java dies in die Verwendung eines StringBuilder.
Javamann

6
@ Matto, Sie müssen verwenden, Arrays.toString(yourArray);aber ich denke, Sie verwendetyourArray.toString();
Dzarafata

5
Seit Java können 1.8Sie auch String::joinanstelle der for-Schleife verwenden. String.join("", arr);
Jorn Vernee

2
Android-Entwickler können wie String result = TextUtils.join (",", list) verwenden; stackoverflow.com/questions/33802971/…
Rahul Hawge

102

Verwenden Sie Apache Commons StringUtils.join(). Es nimmt ein Array als Parameter (und hat auch Überladungen für Iterableund IteratorParameter) und ruft toString()jedes Element auf (wenn es nicht null ist), um die Zeichenfolgendarstellung jedes Elements abzurufen. Jede Element-Zeichenfolgendarstellung wird dann zu einer Zeichenfolge mit einem dazwischen liegenden Trennzeichen verbunden, sofern eines angegeben ist:

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

Produziert:

a-b-1

1
kleinere Korrektur: joinString = StringUtils.join (neues Objekt [] {"a", "b", "1"}, "-");
Questborn

35

Ich verwende dafür gerne Googles Guava Joiner , z.

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

würde den gleichen String erzeugen wie:

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

ETA: Java 8 unterstützt jetzt ähnlich:

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

Unterstützung für das Überspringen von Nullwerten wird nicht angezeigt, aber das lässt sich leicht umgehen.


10
Aber wenn wir der Handlung treu nullwären , wäre "er, dessen Name nicht erwähnt werden darf" :-)
Stephen C

22
Wenn Sie mutig sind: ;-)Joiner.on(", ").useForNull("Voldemort").join("Harry", null, "Ron", "Hermione");
reich

Verwenden von Java-8String.join(", ", "Harry", null, "Ron", "Hermione").replaceAll("null", "Voldermart");
Cjo

13

Sie können dies bei einem Array aprimitiven Typs tun :

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

23
StringBuffer ist alt. Verwenden Sie stattdessen StringBuilder, für dessen Verwendung in einem Thread keine unnötige Synchronisierung erforderlich ist.
Jason S

13

Von Java 8 aus denke ich am einfachsten:

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

Auf diese Weise können Sie ein beliebiges Trennzeichen auswählen.


10

Probieren Sie die Arrays.deepToString- Methode aus.

Gibt eine Zeichenfolgendarstellung des "tiefen Inhalts" des angegebenen Arrays zurück. Wenn das Array andere Arrays als Elemente enthält, enthält die Zeichenfolgendarstellung deren Inhalt usw. Diese Methode dient zum Konvertieren mehrdimensionaler Arrays in Zeichenfolgen


Wenn Sie nicht viel Kontrolle benötigen, ist dies meiner Meinung nach die einfachste Lösung, da Sie keine Drittanbieter-Bibliothek benötigen. Hier ein Beispiel: System.out.println (Arrays.deepToString (args));
Neves

7

Probieren Sie die überladenen Methoden Arrays.toString aus .

Oder versuchen Sie Folgendes unter der allgemeinen Implementierung:

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();
}

Dann teilen Sie uns das gewünschte Format mit. Andernfalls können wir nicht erraten, was Sie vorhaben.
Jason S

3

Im Folgenden finden Sie ein Beispiel für die Konvertierung von Array in String.

    öffentliche Klasse ArrayToString
    {
public static void main (String [] args) { String [] strArray = neuer 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);
    }
}


1
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

Wenn Sie nicht die Wahl haben, aber Java 6 oder 7 zu verwenden, sollten Sie Divide & Conquer Join verwenden.


0

Sie möchten Code, der eine Zeichenfolge aus arrayList erzeugt.

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

Sie können dies auf zwei Arten tun: Verwenden von String als Ergebnis oder StringBuffer / StringBuilder.

Beispiel:

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

... aber dies ist aus Leistungsgründen keine gute Praxis. Besser ist es, StringBuffer (threadsicher) oder StringBuilder zu verwenden, die besser zum Hinzufügen von Strings geeignet sind



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

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

System.out.print(s);

1
Ihre Antwort ist im Grunde die gleiche wie smas; nur etwas komplizierter; also sicher nicht "der einfachste". Außerdem ist Arrays.toString () noch einfacher.
GhostCat

-22

Wenn Sie wissen, wie viele Elemente das Array enthält, können Sie dies auf einfache Weise tun:

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

10
Das ist in der realen Welt kaum anwendbar und zeigt einige schlechte Programmierpraktiken.
Jk1

3
Könnte eine Goldmedaille für -50 Negative sein
Pablo Cegarra
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.