wake-up-neo.com

Wie schneidet man Leerraum von allen Elementen im Array ab?

Ich habe mich nur gefragt, was der beste Weg wäre, den Leerraum von allen Elementen einer Liste zu entfernen.

Wenn ich zum Beispiel String [] array = {" String", "Tom Selleck "," Fish "}Wie hätte ich alle Elemente als {"String","Tom Selleck","Fish"}

Vielen Dank!

33
TomSelleck

Versuche dies:

String[] trimmedArray = new String[array.length];
for (int i = 0; i < array.length; i++)
    trimmedArray[i] = array[i].trim();

Jetzt enthält trimmedArray die gleichen Zeichenfolgen wie array, jedoch ohne führende und nachgestellte Leerzeichen. Alternativ können Sie dies schreiben, um die Strings direkt im selben Array zu ändern:

for (int i = 0; i < array.length; i++)
    array[i] = array[i].trim();
52
Óscar López

Eine weitere Java 8-Lambda-Option: 

String[] array2 = Arrays.stream(array).map(String::trim).toArray(String[]::new);

Und die hässliche, aber optimierte Version ohne neue Array-Erstellung

Arrays.stream(array).map(String::trim).toArray(unused -> array);

Original "Array" wird geändert.

18
user2189998

Fügen Sie in Ihrem Anwendungserstellungspfad commons-lang3-3.1.jar hinzu. Verwenden Sie den folgenden Code-Ausschnitt, um das String-Array zu trimmen.

String array = {" String", "Tom Selleck "," Fish "};
array = StringUtils.stripAll(array);
9
blueDexter

In Java 8 scheint Arrays.parallelSetAll für diesen Zweck vorbereitet zu sein:

import Java.util.Arrays;

Arrays.parallelSetAll(array, (i) -> array[i].trim());

Dadurch wird das ursprüngliche Array geändert und jedes Element wird durch das Ergebnis des Lambda-Ausdrucks ersetzt.

6
danielmcd

Ich weiß, dass dies ein wirklich alter Beitrag ist, aber seit Java 1.8 gibt es eine schönere Möglichkeit, jeden String in einem Array zu trimmen.

Java 8 Lamda Expression-Lösung:

List<String> temp = new ArrayList<>(Arrays.asList(yourArray));
temp.forEach(e -> {temp.set((temp.indexOf(e), e.trim()});
yourArray = temp.toArray(new String[temp.size()]);

mit dieser Lösung müssen Sie kein neues Array erstellen.
Wie in der Lösung von Óscar López

6
YvesHendseth

Sie können einfach die Elemente im Array durchlaufen und array[i].trim() für jedes Element aufrufen

5
hehewaffles

Ich wusste nicht, wie das OP in erster Linie (vor 6 Jahren) {" String", "Tom Selleck "," Fish "} in einem Array war.

Mein Array ist das Ergebnis der Verwendung von split für eine Zeichenfolge, die zusätzliche Leerzeichen um Trennzeichen enthalten kann. Meine Lösung bestand darin, diese Frage zum Zeitpunkt der Trennung anzugehen. Mein Code folgt. Nach dem Test habe ich splitWithTrim () in meine Utils-Klasse meines Projekts aufgenommen. Es behandelt meinen Anwendungsfall; Vielleicht möchten Sie darüber nachdenken, welche Arten von Zeichenfolgen und Trennzeichen Sie treffen können, wenn Sie sich dafür entscheiden.

public class Test {
    public static void main(String[] args) {
        test(" abc def  ghi   jkl ", " ");
        test("  abc; def  ;ghi  ; jkl; ", ";");
    }

    public static void test(String str, String splitOn) {
        System.out.println("Splitting \"" + str + "\" on \"" + splitOn + "\"");
        String[] parts = splitWithTrim(str, splitOn);
        for (String part : parts) {
            System.out.println("(" + part + ")");
        }
    }

    public static String[] splitWithTrim(String str, String splitOn) {
        if (splitOn.equals(" ")) {
            return str.trim().split(" +");
        } else {
            return str.trim().split(" *" + splitOn + " *");
        }
    }
}

Beim Ausführen der Testanwendung wird ausgegeben:

Splitting " abc def  ghi   jkl " on " "
(abc)
(def)
(ghi)
(jkl)
Splitting "  abc; def  ;ghi  ; jkl; " on ";"
(abc)
(def)
(ghi)
(jkl)
0
Tamias