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.
Antworten
Zu viele Anzeigen?Ä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.
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")
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();
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
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);