web-dev-qa-db-fra.com

La méthode split () dans 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é lors de la construction d'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, cela signifie qu'elle ne passe pas par la boucle. Lorsque je modifie l'argument de la méthode temp.split() par d'autres caractères, cela fonctionne correctement, comme d'habitude. Quel pourrait être le problème?

172
Bhavesh

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

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

438
rob mayoff

Le documentation sur split() dit:

Divise cette chaîne autour des correspondances de la donnée expression régulière.

(Souligné par moi.)

Un point est un caractère spécial dans la syntaxe d'une expression régulière. Utilisez Pattern.quote() sur le paramètre à scinder () si vous souhaitez que le scission se fasse sur un modèle de chaîne littéral:

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

Essayer:

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

La méthode est:

String[] split(String regex) 

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

9
ysrb

La méthode prend une expression régulière, pas une chaîne, et le point a une signification spéciale dans les expressions régulières. Échapper comme ça split("\\."). Vous avez besoin d'une double barre oblique inversée, la seconde échappe à la première.

9
mbatchkarov

\\. 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];
    }
}
5
Israr Khan

Ça fonctionne bien. Avez-vous lu la documentation ? La chaîne est convertie en une expression régulière.

. est le caractère spécial correspondant à tous les caractères saisis.

Comme pour tout caractère spécial d'expression régulière, vous vous échappez avec un \. Vous avez besoin d'un \ supplémentaire pour l'échappement de chaîne Java.

3
Matthew Flaschen
    private String temp = "mahesh.hiren.darshan";

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

  Log.e("1", ""+s_temp[0]);
2
Hiren Patel