web-dev-qa-db-fra.com

Comment couper les espaces de tous les éléments d'un tableau?

Je me demandais simplement quel serait le meilleur moyen de supprimer l’espace blanc de tous les éléments d’une liste.

Par exemple, si j'avais String [] array = {" String", "Tom Selleck "," Fish "}Comment pourrais-je obtenir tous les éléments en tant que {"String","Tom Selleck","Fish"}

Merci!

33
TomSelleck

Essaye ça:

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

Maintenant, trimmedArray contient les mêmes chaînes que array, mais sans les espaces de début et de fin. Vous pouvez également écrire ceci pour modifier les chaînes sur place dans le même tableau:

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

Une autre option Java 8 lambda: 

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

Et la version laide mais optimisée sans nouvelle création de tableau

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

Le "tableau" d'origine est modifié.

18
user2189998

Ajoutez commons-lang3-3.1.jar dans le chemin de génération de votre application . Utilisez l'extrait de code ci-dessous pour supprimer le tableau String.

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

En Java 8, Arrays.parallelSetAll semble prêt à être utilisé à cette fin:

import Java.util.Arrays;

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

Cela modifiera le tableau d'origine en place, en remplaçant chaque élément par le résultat de l'expression lambda.

6
danielmcd

Je sais que c’est un très vieux billet, mais depuis Java 1.8, il existe un moyen plus agréable de couper chaque chaîne d’un tableau.

Solution Java 8 Lamda Expression:

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

avec cette solution, vous n'avez pas à créer un nouveau tableau.
Comme dans la solution d'Óscar López

6
YvesHendseth

Vous pouvez simplement parcourir les éléments du tableau et appeler array[i].trim() sur chaque élément

5
hehewaffles

Ne sachant pas comment l'OP a eu {" String", "Tom Selleck "," Fish "} dans un tableau en premier lieu (il y a 6 ans), j'ai pensé partager ce avec quoi je me suis retrouvé.

Mon tableau est le résultat de l'utilisation de split sur une chaîne pouvant contenir des espaces supplémentaires autour des délimiteurs. Ma solution consistait à régler ce problème au moment de la scission. Mon code suit. Après les tests, j'ai placé splitWithTrim () dans la classe Utils de mon projet. Il gère mon cas d'utilisation; vous voudrez peut-être examiner quels types de chaînes et de délimiteurs vous pourriez rencontrer si vous décidez de les utiliser.

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 + " *");
        }
    }
}

La sortie de l'exécution de l'application de test est:

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