Bonjour,
j'ai une chaine de ce type
"FA SOL) (LALALLALALALALALLALA)"
comment savoir si il ya une parenthese ouvrante dans cette chaine ?
ce code ne fonctionne pas :(
System.out.println(Pattern.matches("(^*(*$)", chaine));
merci.
Version imprimable
Bonjour,
j'ai une chaine de ce type
"FA SOL) (LALALLALALALALALLALA)"
comment savoir si il ya une parenthese ouvrante dans cette chaine ?
ce code ne fonctionne pas :(
System.out.println(Pattern.matches("(^*(*$)", chaine));
merci.
DOC Java
si ca te retourne 0 (ou null, faut verifier, je sais plus), c'est que ca n'est pas contenu, sinon ca te renvoie l'index du caractere.Citation:
indexOf(int ch)
Returns the index within this string of the first occurrence of the specified character
je n'ai pas que la parenthese a chercher apres je vais avoir d'autre chose.
voici mon erreur :
java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 4
(^*(*$)
^
at java.util.regex.Pattern.error(Pattern.java:1528)
at java.util.regex.Pattern.sequence(Pattern.java:1645)
at java.util.regex.Pattern.expr(Pattern.java:1545)
at java.util.regex.Pattern.group0(Pattern.java:2297)
at java.util.regex.Pattern.sequence(Pattern.java:1573)
at java.util.regex.Pattern.expr(Pattern.java:1545)
at java.util.regex.Pattern.group0(Pattern.java:2297)
at java.util.regex.Pattern.sequence(Pattern.java:1573)
at java.util.regex.Pattern.expr(Pattern.java:1545)
at java.util.regex.Pattern.compile(Pattern.java:1279)
at java.util.regex.Pattern.<init>(Pattern.java:1035)
at java.util.regex.Pattern.compile(Pattern.java:779)
at java.util.regex.Pattern.matches(Pattern.java:865)
at com.sfr.ogrv2.commun.TestMigration.testChercheSousChaine(TestMigration.java:1459)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186)
la méthode indexOf() renvoie l'index ou est le caractère et -1 s'il n'y est pasCitation:
Envoyé par viena
Code:
1
2
3 if("FA SOL) (LALALLALALALALALLALA)".indexOf("(")==-1) { // pas de parenthèse ouvrante }
C'est quoi que tu veux exactement :?:
C'est pour regarder si le texte est bien ecrit ou rechercher un "mot" particulier :?:
"FA SOL) (LALALLALALALALALLALA-MUMM-LAALAL) sfsdfs fdssdfsdfsdfsdf"
je veux deja savoir si cette expression reguliere fait partie de ma chaine.
^*SOL) (*-MUMM-*$
je pensai plutot a un motif du genre.
mais j'ai toujours l'erreur poste au dessus.
bonjour,
La parenthèse est un caractère spéciale pour une expression régulière.
essaie comme ça.Citation:
^*SOL\\)\\ (*-MUMM-*$
bon courage
Si tu veux récupérer les différentes parties :
"^(DO|RE|MI|FA|SOL|LA|SI)+\\)\\((.*)\\)$"
Dans cette expression il y 2 groupes : un qui identifie les accord et l'autre les paroles.
Salut,Citation:
Envoyé par grizzz
L'erreur vient du fait que ton expression régulière est incorrect.
Le caractère "*" signifie que le caractère précédent peut être présent 0 ou plusieurs fois.
Mais tu met un "*" en début de ligne c'est incorrect.
De plus les parenthèses doivent être protégé car c'est interprété par les regexp...
Tu devrait avoir quelque chose comme ca :
a++Code:"^.*SOL\\) \\(.*-MUMM-.*$"
merci a tous je n'avais teste qu'un seul \ et je ne pensai pas qu'il fallait mettre le . avant *.
Merci aussi:
J'ai eu une erreur similaire
avec la fonction
replaceFirst("* ",""));
--> Dangling meta character '*' near index 0
********************
Il faut écrire: (attention deux \)
replaceFirst("\\* ",""));
***
Même remarque pour replaceAll("+","&"))
il faut écrire "\\+"
(ps: si on ecrit "\+", on obtient une erreur de compilation séquence d'échappement non valide, allez savoir pourquoi! alorq qu l'on a Dangling meta character '+')
(ps2: une recherce de "\+" fait planter google)
--- Voir "[Debutant(e)]probleme avec un replaceAll" dans le forum