352 Stimmen

Der beste Weg, um eine ArrayList in eine Zeichenkette zu konvertieren

Ich habe eine ArrayList die ich vollständig als String ausgeben möchte. Im Wesentlichen möchte ich sie in der Reihenfolge ausgeben, in der die toString der einzelnen Elemente durch Tabulatoren getrennt. Gibt es eine schnelle Möglichkeit, dies zu tun? Sie könnten Schleife durch sie (oder entfernen Sie jedes Element) und verketten es zu einem String, aber ich denke, dies wird sehr langsam sein.

94voto

Sheng.W Punkte 2132

Ändern von Liste zu einer lesbaren und aussagekräftigen Zeichenfolge ist wirklich eine häufige Frage, die jedem begegnen kann.

Fall 1 . Wenn Sie die StringUtils von Apache in Ihrem Klassenpfad haben (wie von rogerdpack und Ravi Wallau):

import org.apache.commons.lang3.StringUtils;
String str = StringUtils.join(myList);

Fall 2 . Wenn Sie nur die Möglichkeiten von JDK(7) nutzen wollen:

import java.util.Arrays;
String str = Arrays.toString(myList.toArray()); 

Bauen Sie niemals selbst Räder, verwenden Sie keine Schleife für diese einzeilige Aufgabe.

66voto

Ken Shih Punkte 723

Wenn Sie nach einem schnellen Einzeiler suchen, können Sie dies ab Java 5 tun:

myList.toString().replaceAll("\\[|\\]", "").replaceAll(", ","\t")

Wenn Sie außerdem nur den Inhalt ausdrucken wollen und sich weniger um die " \t ", können Sie einfach dies tun:

myList.toString()

die eine Zeichenkette zurückgibt wie

[str1, str2, str3]

Wenn Sie ein Array (nicht ArrayList) haben, dann können Sie das gleiche wie folgt erreichen:

 Arrays.toString(myList).replaceAll("\\[|\\]", "").replaceAll(", ","\t")

38voto

Paul Tomblin Punkte 172816

Schleife durchlaufen und toString aufrufen. Es gibt keinen magischen Weg, und wenn es einen gäbe, was glauben Sie, würde er im Verborgenen tun, außer eine Schleife zu durchlaufen? Über die einzige Mikro-Optimierung wäre StringBuilder anstelle von String zu verwenden, und selbst das ist nicht ein großer Gewinn - Verkettung von Zeichenfolgen verwandelt sich in StringBuilder unter der Abdeckung, aber zumindest, wenn Sie es so schreiben, können Sie sehen, was los ist.

StringBuilder out = new StringBuilder();
for (Object o : list)
{
  out.append(o.toString());
  out.append("\t");
}
return out.toString();

36voto

Brian Punkte 13229

Die meisten Java-Projekte haben oft apache-commons lang verfügbar. StringUtils.join()-Methoden ist sehr schön und hat mehrere Varianten, um fast jeden Bedarf zu decken.

public static java.lang.String join(java.util.Collection collection,
                                    char separator)

public static String join(Iterator iterator, String separator) {
    // handle null, zero and one elements before building a buffer 
    Object first = iterator.next();
    if (!iterator.hasNext()) {
        return ObjectUtils.toString(first);
    }
    // two or more elements 
    StringBuffer buf = 
        new StringBuffer(256); // Java default is 16, probably too small 
    if (first != null) {
        buf.append(first);
    }
    while (iterator.hasNext()) {
        if (separator != null) {
            buf.append(separator);
        }
        Object obj = iterator.next();
        if (obj != null) {
            buf.append(obj);
        }
    }
    return buf.toString();
}

Parameter:

Sammlung - die Sammlung der zusammenzufügenden Werte, kann null sein

Abscheider - das zu verwendende Trennzeichen

Rückgabe : der verbundene String, null wenn null iterator input

S 2.3

19voto

kehers Punkte 3968

Android hat eine TextUtil-Klasse, die Sie verwenden können http://developer.Android.com/reference/Android/text/TextUtils.html

String implode = TextUtils.join("\t", list);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X