178 votes

La méthode split() en Java ne fonctionne pas sur un point (.)

J'ai préparé un extrait de code simple afin de séparer la partie erronée de mon application web.

public class Main {

    public static void main(String[] args) throws IOException {
        System.out.print("\nEnter a string:->");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String temp = br.readLine();

        String words[] = temp.split(".");

        for (int i = 0; i < words.length; i++) {
            System.out.println(words[i] + "\n");
        }
    }
}

Je l'ai testé en construisant une application web JSF. Je veux juste savoir pourquoi dans le code ci-dessus temp.split(".") ne fonctionne pas. La déclaration,

System.out.println(words[i]+"\n"); 

n'affiche rien sur la console signifie qu'il ne passe pas par la boucle. Lorsque je change l'argument de la méthode temp.split() à d'autres personnages, cela fonctionne très bien comme d'habitude. Quel pourrait être le problème ?

458voto

rob mayoff Points 124153

java.lang.String.split divise sur les expressions régulières, et . dans une expression régulière signifie "tout caractère".

Essayez temp.split("\\.") .

61voto

millimoose Points 22665

El la documentation sur split() dit :

Divise cette chaîne de caractères en fonction de la correspondance avec le critère expression régulière .

(C'est moi qui souligne.)

Le point est un caractère spécial dans la syntaxe des expressions régulières. Utilisez Pattern.quote() sur le paramètre de split() si vous voulez que le split soit sur un motif de chaîne littéral :

String[] words = temp.split(Pattern.quote("."));

9voto

mbatchkarov Points 5090

La méthode prend une expression régulière, et non une chaîne de caractères, et le point a une signification particulière dans les expressions régulières. Échappez-le comme suit split("\\.") . Vous avez besoin d'une double barre oblique inversée, la deuxième échappant à la première.

9voto

ysrb Points 5301

Essayez :

String words[]=temp.split("\\.");

La méthode est la suivante :

String[] split(String regex) 

"." est un caractère réservé en regex

5voto

Israr Khan Points 63

\\. est la réponse simple. Voici un code simple pour votre aide.

while (line != null) {
    //             
    String[] words = line.split("\\.");
    wr = "";
    mean = "";
    if (words.length > 2) {
        wr = words[0] + words[1];
        mean = words[2];

    } else {
        wr = words[0];
        mean = words[1];
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X