[Java] L'histoire selon laquelle le tableau attendu n'a pas été obtenu par la méthode String.split.

introduction

La méthode de type String de Java a une méthode split. En utilisant cette méthode, par exemple, comme suit, vous pouvez diviser une chaîne de caractères par n'importe quel caractère et générer un tableau avec les éléments divisés.

example1.java


import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        //La chaîne de caractères que vous souhaitez créer un tableau
        String str = "Pomme,Orange,banane,pastèque,melon";
        //Spécifiez le caractère à utiliser pour la division
        String[] strArray = str.split(",");
        for(int i = 0; i < strArray.length; i++) {
            System.out.println((i + 1) + ":" + strArray[i]);
        }
    }
}

Lorsque vous exécutez cette source

1: pomme 2: Mikan 3: banane 4: pastèque 5: Melon

Le résultat est obtenu. Maintenant, la méthode split, mais que faire si les caractères utilisés pour le fractionnement sont consécutifs comme dans l'exemple suivant?

example2.java


import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        //La chaîne de caractères que vous souhaitez créer un tableau
        String str = "Pomme,Orange,,,";
        //Spécifiez le caractère à utiliser pour la division
        String[] strArray = str.split(",");
        for(int i = 0; i < strArray.length; i++) {
            System.out.println((i + 1) + ":" + strArray[i]);
        }
    }
}

Lorsque vous exécutez cette source

1: pomme 2: Mikan 3: 4: 5:

Je m'attendais à obtenir le résultat, mais ce n'était pas le cas.

1: pomme 2: Mikan

A été affiché. En d'autres termes, cela signifie que la taille du tableau obtenu dans ʻexample2.javasera de 2 au lieu de 5. Dans l'exemple ci-dessus, je pensais que la taille du tableau serait de 5 si j'utilisais la méthodesplit`, mais quand je l'ai réellement utilisée dans mon entreprise, ce n'était pas comme prévu et j'ai été déçu.

Solution

Alors, comment ai-je obtenu ce que j'attendais? En conclusion, spécifiez -1 (nombre négatif) comme deuxième argument de la méthode split comme indiqué dans l'exemple ci-dessous.

example3.java


import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        //La chaîne de caractères que vous souhaitez créer un tableau
        String str = "Pomme,Orange,,,";
        //Dans le deuxième argument-Précisez 1
        String[] strArray = str.split(",", -1);
        for(int i = 0; i < strArray.length; i++) {
            System.out.println((i + 1) + ":" + strArray[i]);
        }
    }
}

En spécifiant -1 comme deuxième argument,

1: pomme 2: Mikan 3: 4: 5:

J'ai eu le résultat et j'ai pu obtenir la taille du tableau par le nombre divisé par des virgules.

Ce que j'ai appris

En résolvant ce problème, j'ai lu le Document officiel et j'ai trouvé deux choses. J'ai pu apprendre.

La première est que la méthode split n'est pas fractionnée par la chaîne de caractères spécifiée par le premier argument, mais correctement par l '** expression régulière ** spécifiée par le premier argument.

J'étais convaincu qu'elle serait divisée par la chaîne de caractères spécifiée, mais j'ai réalisé qu'il était possible de diviser la chaîne de caractères dans des conditions plus compliquées en utilisant pleinement les expressions régulières.

La seconde consiste à spécifier un nombre négatif dans le deuxième argument de la méthode split lorsque les chaînes de caractères que vous souhaitez fractionner sont continues comme dans l'exemple ci-dessus. Le deuxième argument de la méthode «split» représente le seuil de fractionnement. Si le deuxième argument n'est pas spécifié, il sera traité de la même manière que si 0 était spécifié pour le deuxième argument. Dans ce cas, si le résultat de la division dans l'ordre est un caractère vide, il sera ignoré. Par conséquent, dans ʻexample2.java`, la taille du tableau divisé est maintenant de 2 au lieu de 5. Pour éviter cela, j'ai trouvé qu'il était nécessaire de spécifier un nombre négatif pour le deuxième argument afin que le nombre de divisions soit illimité et que les caractères vides ne soient pas supprimés.

en conclusion

J'ai pu réaffirmer l'importance de me référer à la documentation officielle pour résoudre ce problème. Et j'ai pu réaliser l'importance d'utiliser la méthode après avoir compris exactement quel type de traitement est effectué. J'espère que cet article aide quelqu'un.

Recommended Posts

[Java] L'histoire selon laquelle le tableau attendu n'a pas été obtenu par la méthode String.split.
L'histoire selon laquelle la méthode d'initialisation de variable appelée par le constructeur Java ne doit pas être remplacée
L'histoire de ne pas connaître le comportement de String en passant par Java
L'histoire reçue par Java SE11 silver
L'histoire selon laquelle le servlet n'a pas pu être chargé dans l'application Web Java
L'histoire que je n'ai pas pu construire après l'installation de plusieurs Java sur Windows
[Spring Boot] L'histoire selon laquelle le bean de la classe avec l'annotation ConfigurationProperties n'a pas été trouvé
Lire la capture de paquets obtenue par tcpdump avec Java
L'histoire selon laquelle la mise à jour forcée n'a pas pu être mise en œuvre
L'histoire que .java est également construite dans Unity 2018
L'histoire selon laquelle le paramètre de requête de l'application iPhone n'a pas pu être obtenu avec le servlet
La version de Ruby installée par défaut sur le Mac a été référencée, pas de rbenv
Récapitulatif des valeurs renvoyées par la méthode des caractéristiques Spliterator #java
[Java Silver] Comment générer un tableau
[Gradle] L'histoire selon laquelle le fichier de classe n'existait pas dans le fichier jar
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
L'opérateur qui est né pour naître, instanceof (Java) ~ Comment utiliser l'opérateur instanceof ~
L'histoire selon laquelle l'erreur de construction ne s'est pas arrêtée lors de l'utilisation d'Eclipse 2020
L'histoire selon laquelle les performances de traitement d'ARM d'Open JDK étaient faibles
L'histoire de rendre possible la construction d'un projet qui a été construit par Maven avec Ant