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(Ssortingng[] args) throws IOException { System.out.print("\nEnter a ssortingng:->"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Ssortingng temp = br.readLine(); Ssortingng words[] = temp.split("."); for (int i = 0; i < words.length; i++) { System.out.println(words[i] + "\n"); } } } 

Je l’ai testé lors de la création 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"); 

ne rien afficher sur la console signifie qu’il ne passe pas par la boucle. Lorsque je modifie l’argument de la méthode temp.split() sur d’autres caractères, cela fonctionne comme d’habitude. Quel pourrait être le problème?

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

java.lang.Ssortingng.split se divise sur des expressions régulières et . dans une expression régulière signifie “n’importe quel personnage”.

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

La documentation sur split() dit:

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

(Soulignez le mien.)

Un point est un caractère spécial dans la syntaxe des expressions régulières. Utilisez Pattern.quote() sur le paramètre à fractionner () si vous souhaitez que le fractionnement soit sur un modèle de chaîne littéral:

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

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-vous comme si split("\\.") . Vous avez besoin d’un double backslash, le second échappe au premier.

Essayer:

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

La méthode est la suivante:

 Ssortingng[] split(Ssortingng regex) 

“.” est un caractère réservé dans regex

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

 while (line != null) { // Ssortingng[] words = line.split("\\."); wr = ""; mean = ""; if (words.length > 2) { wr = words[0] + words[1]; mean = words[2]; } else { wr = words[0]; mean = words[1]; } } 
  private Ssortingng temp = "mahesh.hiren.darshan"; Ssortingng s_temp[] = temp.split("[.]"); Log.e("1", ""+s_temp[0]); 

Ç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 d’entrée.

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’évasion de chaîne Java.