web-dev-qa-db-fra.com

Comment initialiser un tableau String de longueur 0 en Java?

Les Java Docs de la méthode
String[] Java.io.File.list(FilenameFilter filter)
inclut ceci dans la description des retours:

Le tableau sera vide si le répertoire est vide ou si aucun nom n'a été accepté par le filtre.

Comment est-ce que je fais une chose semblable et initialise un tableau de chaîne (ou n'importe quel autre tableau d'ailleurs) pour avoir une longueur 0?

125
Ron Tuffin

Comme d'autres l'ont dit,

new String[0]

va en effet créer un tableau vide. Cependant, il y a une bonne chose à propos des tableaux: leur taille ne peut pas changer, vous pouvez donc toujours utiliser la même référence de tableau vide. Donc dans votre code, vous pouvez utiliser:

private static final String[] EMPTY_ARRAY = new String[0];

et retournez simplement EMPTY_ARRAY à chaque fois que vous en avez besoin - il n'est pas nécessaire de créer un nouvel objet à chaque fois.

213
Jon Skeet

String[] str = new String[0];?

23
mauris
String[] str = {};

Mais

return {};

ne fonctionnera pas car les informations de type sont manquantes.

16
Thomas Jung

Ok, j'ai effectivement trouvé la réponse, mais je pensais que je pourrais "importer" la question dans SO de toute façon.

String[] files = new String[0];
ou
int[] files = new int[0];

12
Ron Tuffin

Vous pouvez utiliser ArrayUtils.EMPTY_STRING_ARRAY à partir de org.Apache.commons.lang3.

import org.Apache.commons.lang3.ArrayUtils;

    class Scratch {
        public static void main(String[] args) {
            String[] strings = ArrayUtils.EMPTY_STRING_ARRAY;
        }
    }
1
freak0

Tout ce que tu dois faire est

String str = "";
String[] newString = new String[str.length()];

Cela donnera un tableau de chaînes vide.

de ma vidéo

Merci ItsPete! Cette réponse est toujours importante car elle montre comment la chaîne est vide et comment cela fonctionne. Par exemple, un tableau int ne peut pas redimensionner ou changer de taille à cause de ce 0 qui est un nombre entier. Il y aura une erreur ArrayIndexOutOfBoundsException. Il doit y avoir une différence entre String et int. Cependant, encore une fois, String a les guillemets doubles et travaille à redimensionner. Bien sûr, c'est un moyen plus long. Il montre toujours le raisonnement entre int et principalement String.

0
ashkanaral

Créez une fonction qui ne renverra pas null à la place, retournera un tableau vide que vous pourrez lire sous le code pour comprendre.

    public static String[] getJavaFileNameList(File inputDir) {
    String[] files = inputDir.list(new FilenameFilter() {
        @Override
        public boolean accept(File current, String name) {
            return new File(current, name).isFile() && (name.endsWith("Java"));
        }
    });

    return files == null ? new String[0] : files;
}
0
Swapnil Gangrade