2011-10-28 2 views
146

J'ai préparé un extrait de code simple afin de séparer la partie erronée de mon application Web. 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,La méthode split() en Java ne fonctionne pas sur un point (.)

System.out.println(words[i]+"\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() en d'autres caractères, cela fonctionne très bien comme d'habitude. Quel pourrait être le problème?

+3

Échappez-vous. Split fonctionne sur une regex –

+5

Yikes, il * par défaut * aux expressions régulières en Java? –

Répondre

352

java.lang.String.split scinde sur les expressions régulières et . dans une expression régulière signifie "n'importe quel caractère".

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

+0

Cela a fonctionné pour moi aussi. Je faisais pour "|" cela a fonctionné avec "\\ |". Merci – Bhupinder

2

Cela fonctionne très bien. Avez-vous lu the documentation? La chaîne est convertie en une expression régulière.

. est le caractère spécial correspondant à tous les caractères d'entrée.

Comme avec n'importe quel 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.

8

Essayez:

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

La méthode est:

String[] split(String regex) 

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

52

Le documentation on split() dit:

Splits cette chaîne autour de matchs de la donnée regular expression.

(moi qui souligne.)

Un point est un caractère spécial dans la syntaxe d'expression régulière. Utilisez Pattern.quote() sur le paramètre de diviser() si vous voulez que la scission soit sur un modèle de chaîne littérale:

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

Il est toujours préférable d'utiliser Pattern.quote –

10

La méthode prend une expression régulière, pas une chaîne, et le point a une signification particulière dans les expressions régulières . Échappez-le comme si split("\\."). Vous avez besoin d'un double backslash, le second échappe le premier.

2
private String temp = "mahesh.hiren.darshan"; 

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

    Log.e("1", ""+s_temp[0]); 
5

\\. 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]; 
    } 
} 
Questions connexes