chaîne de caractères.parse(“(”) erreur
J'ai un fichier qui contient des données comme suit:
recv(1178884, NULL, 4294967267, 0) = 0
......
......
Mon code source est:
try (BufferedReader br = new BufferedReader(new FileReader("D:\\smsTrace.txt"))) {
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
String sysCallName = sCurrentLine;
String[] sysCallTokens = sysCallName.split("(");
System.out.println(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
}
Quand je split avec sysCallName.split(",")
il fonctionne très bien mais lorsque j'utilise comme ci-dessus, il jette exception suivante.
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed group near index 1
(
^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.accept(Unknown Source)
at java.util.regex.Pattern.group0(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.split(Unknown Source)
at java.lang.String.split(Unknown Source)
at fileReading.main(fileReading.java:19)
Une idée de ce que je fais de mal?
Vous devez vous connecter pour publier un commentaire.
Vous avez pour échapper à l'ouverture de parenthèse:
Parce que
split()
s'attend à une expression régulière, et les crochets sont utilisés pour marquer les captures de groupes dans une regex. Ils doivent donc être en paires. Si vous voulez juste une parenthèse, il a besoin d'être échappés.String#split
prend une expression régulière comme le fractionnement des critères. Maintenant,(
dans la regex est utilisé pour capturer les groupes, si vous avez besoin de s'en échapper, si vous voulez le match.Vous avez deux façons: -
Échapper à la support: -
Utilisation
Character class
: -Dans une classe de caractères, toutes les méta-caractères, perdent leur signification spéciale, de sorte qu'un
(
est juste un(
, et undot(.)
est juste undot(.)
. Personnellement, je préfère la 2ème option, car elle a l'air plus clair.échapper à votre chaîne. au lieu de
essayer
Vous devez ajouter une évasion char:
(
est un caractère réservé pour les expressions régulièresVous pouvez résoudre ce problème en le faisant précéder d'une barre oblique inverse:
\(
Tout en essayant de split avec des caractères spéciaux, vous devez utiliser
\\
avec votre caractère spécial. voici donc essayer comme cecivous pouvez trouver le fractionnement des chaînes avec d'autres caractères spéciaux à partir de ici
Vous pouvez essayer De modèle.citation comme:
Si vous voulez scinder une chaîne à l'aide de caractères spéciaux, vous pouvez utiliser la méthode ci-dessus.
Essayez d'utiliser cette ligne dans votre code
(Juste ajouté caractère d'échappement avant l'ouverture de la parenthèse)
Vous pouvez récupérer les données comme si c'était un tableau:
@Endorox votre extrait de code est incomplet. Merci, de toute façon, il m'a aidé.
Explication: tout d'Abord, nous avons divisé l'ensemble de la chaîne en deux, où () est le diviseur. nous voulons de tout ignorer de gauche, si nous prenons [1] ou de la deuxième indice de la deux index qui est généré à la suite de la scission. nous avons utilisé //comme caractère d'échappement qui nous aide à utiliser ( comme un paramètre split.
De la même façon, nous divisons les restes avec ) et puis avec la virgule (,).