2014-08-28 3 views
3

Je veux diviser une chaîne pour le caractère ^ mais cela ne fonctionne pas. J'ai le code suivant:java split ne fonctionne pas correctement avec^

String numberBase10 = "3.52*10^2"; 
String[] vector = numberBase10.split("^"); 
System.out.println("numberBase10: " + numberBase10); 
System.out.println("Vector[0]: " vector[0]); 

Je reçois la sortie suivante:

numberBase10: 3.52*10^2 
Vector[0]: 3.52*10^2 

Et si je tente d'accéder vecteur [1] Je reçois l'erreur IndexOutOfArray.

Je dois mettre n'importe quel caractère d'échappement afin que la division fonctionne avec ^?

Merci

+0

double possible de [Java expressions régulières et signe dollar] (http://stackoverflow.com/questions/3853726/java-regular-expressions-and -dollar-signe) – ControlAltDel

+0

duplication possible de [La méthode split() en Java ne fonctionne pas sur un point (.)] (http://stackoverflow.com/questions/7935858/the-split-method-in-java- ne fonctionne pas sur un point) – Raedwald

Répondre

8

Vous devez échapper avec \\^.

^est un caractère spécial en lui-même, ce qui signifie une négation (dans un groupe, tel que [^ abc], qui correspond à tout sauf à abc) ou à l'ancre pour le début de ligne.

8

split prend une expression régulière. ^ est un ancrage pour correspondre au début de la chaîne en regex doit donc être échappé

String[] vector = numberBase10.split("\\^"); 
1

Le ^ est un caractère spécial comme expression régulière, vous devez échapper - Si je change à,

String[] vector = numberBase10.split("\\^"); 

Puis-je obtenir

Vector[0]: 3.52*10 

Avec aucun autre changement de code.

2

La méthode de chaîne java divisée fonctionne sur une expression régulière, et «^» est un caractère d'ancrage dans un regex il doit être échappé de le traiter comme un personnage régulier:

String[] vector = numberBase10.split("\\^"); 
1

Puisque la méthode split() attend une expression régulière, si vous voulez partager sur une chaîne exacte sans se soucier des caractères spéciaux regex qu'il peut contenir, vous devez échapper d'abord avec

String regex = java.util.regex.Pattern.quote("^");

ensuite divisés sur regex. Le concept peut être emballé dans une méthode statique agréable:

public static String[] splitRaw(String input, String separator) { 
    String regex = java.util.regex.Pattern.quote(separator); 
    return input.split(regex); 
} 
Questions connexes