Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1515 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  fonction équivalente au 'split' de perl? [pb regexp]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonction équivalente au 'split' de perl? [pb regexp]

n°377572
arghbis
salops de dauphins
Posté le 30-04-2003 à 09:53:24  profilanswer
 

Salut tout le monde!
 
j'aurais voulu savoir si en java, il existe une fonction équivalente au split de Perl (qui je le rapelle, permet de couper une chaine de charactère selon un motif et récupère le résultat dans un tableau).
ceci, parceque je dois ajouter des données au milieu d'un fichier qui a une structure bien définie. J'ai regardé du côté des regexp java, mais je vois pas de moyen aussi simple que split.
 
une idée??


Message édité par arghbis le 30-04-2003 à 14:40:03
mood
Publicité
Posté le 30-04-2003 à 09:53:24  profilanswer
 

n°377589
arghbis
salops de dauphins
Posté le 30-04-2003 à 10:01:56  profilanswer
 

désolé, j'ai rien dit!!
 
j'ai fait un  [:sh@rdar] , mais j'avais pas vu la bonne fonction!!
 
c chouette, elle existe, et s'appelle "split", dans la classe java.util.regex.pattern!
 
merci tout seul!  [:the time]

n°377606
El_gringo
Posté le 30-04-2003 à 10:06:37  profilanswer
 

Celle de la classe String doit être plus simple à utiliser.

n°377628
benou
Posté le 30-04-2003 à 10:13:22  profilanswer
 

sinon, java.util.StringTokenizer

n°377655
arghbis
salops de dauphins
Posté le 30-04-2003 à 10:23:26  profilanswer
 

ouapi, bon ben j'ai utilisé celle de la classe Sring (vu que c'en est un)!
 
ça m'apprendra à mieux lire avant de poster!!  :ange:

n°377905
arghbis
salops de dauphins
Posté le 30-04-2003 à 11:49:08  profilanswer
 

comprends pas un truc : le pattern, on le défini comment??
si je mets Pattern.compile("aa*\d+\w?" )
il croit que * c vraiment le caractère *, \n il comprends pas, etc...
 
comment qu'on fait hein???

n°377921
El_gringo
Posté le 30-04-2003 à 11:51:57  profilanswer
 

arghbis a écrit :

comprends pas un truc : le pattern, on le défini comment??
si je mets Pattern.compile("aa*\d+\w?" )
il croit que * c vraiment le caractère *, \n il comprends pas, etc...
 
comment qu'on fait hein???


 
C une chaine de caractères ton pattern, et on fait quoi dans les chaines de caractères en Java, pour mettre de anti-slash ? On les double...  
Pattern.compile("aa*\\d+\\w?" )

n°378030
arghbis
salops de dauphins
Posté le 30-04-2003 à 12:43:08  profilanswer
 

ouai, mais alors là, c qd même bizarre! comment fait-il pour faire la diférence entre "je cherche la chaine \n" et "je cherche un retour charriot"??

n°378064
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 30-04-2003 à 13:05:27  profilanswer
 

arghbis a écrit :

ouai, mais alors là, c qd même bizarre! comment fait-il pour faire la diférence entre "je cherche la chaine \n" et "je cherche un retour charriot"??


Passke "la chaîne \n" c'est "\\n" et "retour chariot" c'est "\n" [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°378219
arghbis
salops de dauphins
Posté le 30-04-2003 à 14:39:36  profilanswer
 

bon ben comprends pas!
pourquoi il accepte pas ça :

Code :
  1. String pat = "(property  0 string \"viewLabel\"\s*\n(default \"\" \"\" )";
  2. String [] hrefBuff = aTulipFileString.split(pat);


 
il me dit :
Invalid character in escape sequence.
   (property  0 string "viewLabel" String pat = "(property  0 string \"viewLabel\"\s*\n(default \"\" \"\" )";
 
j'en rajoute une couche : les parenthèses que l'on utilise dans les regexp pour récupérer les match String, comment fait il la différence avec des parenthèses en tant que caractère?
 
Ps: je remarque un truc : la doc java est pas mal, il y a des exemples, mais la plupart du temps ils sont triviaux!


Message édité par arghbis le 30-04-2003 à 14:43:36
mood
Publicité
Posté le 30-04-2003 à 14:39:36  profilanswer
 

n°378223
El_gringo
Posté le 30-04-2003 à 14:42:13  profilanswer
 

arghbis a écrit :

bon ben comprends pas!
pourquoi il accepte pas ça :

Code :
  1. String pat = "(property  0 string \"viewLabel\"\s*\n(default \"\" \"\" )";
  2. String [] hrefBuff = aTulipFileString.split(pat);


 
il me dit :
Invalid character in escape sequence.
   (property  0 string "viewLabel" String pat = "(property  0 string \"viewLabel\"\s*\n(default \"\" \"\" )";


 
s c'est un caractère d'échappement ? '\s' ça existe !? j'crois pas moi !  :o

n°378227
arghbis
salops de dauphins
Posté le 30-04-2003 à 14:44:42  profilanswer
 

ben moi je crois bien!
 Predefined character classes
. Any character (may or may not match line terminators)
\d A digit: [0-9]
\D A non-digit: [^0-9]
\s A whitespace character: [ \t\n\x0B\f\r]
\S A non-whitespace character: [^\s]
\w A word character: [a-zA-Z_0-9]
\W A non-word character: [^\w]
 
cf  [:sh@rdar]

n°378230
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 30-04-2003 à 14:46:03  profilanswer
 

arghbis a écrit :

ben moi je crois bien!
 Predefined character classes
. Any character (may or may not match line terminators)
\d A digit: [0-9]
\D A non-digit: [^0-9]
\s A whitespace character: [ \t\n\x0B\f\r]
\S A non-whitespace character: [^\s]
\w A word character: [a-zA-Z_0-9]
\W A non-word character: [^\w]
 
cf  [:sh@rdar]  


 
Non. Il faut faire la différence entre caractère d'échappement à l'intérieur d'une String Java et caractère d'échappement à l'intérieur d'une regexp. Ici, tu vas devoir écrire \\s


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°378235
arghbis
salops de dauphins
Posté le 30-04-2003 à 14:48:26  profilanswer
 

ben oui mais non!

Code :
  1. String pat = "(property  0 string \"viewLabel\"\\s*\\n(default \"\" \"\" )";


 
marche pas non plus!
 
en plus, je trouve que des exemples simples sur le net!!
personne utilise les regexp en java avec ce genre de choses?? j'y crois pas qd même!

n°378239
El_gringo
Posté le 30-04-2003 à 14:49:03  profilanswer
 

arghbis a écrit :

ben moi je crois bien!
 Predefined character classes
. Any character (may or may not match line terminators)
\d A digit: [0-9]
\D A non-digit: [^0-9]
\s A whitespace character: [ \t\n\x0B\f\r]
\S A non-whitespace character: [^\s]
\w A word character: [a-zA-Z_0-9]
\W A non-word character: [^\w]
 
cf  [:sh@rdar]  


 
Mais tu confonds les patterns et les séquences d'échappement.
Essaye de faire ça :

Code :
  1. String monPattern = "(property  0 string \"viewLabel\"\\s*\n(default \"\" \"\" )";
  2. System.out


Tu comprendra peut être mieux... :heink:

n°378277
arghbis
salops de dauphins
Posté le 30-04-2003 à 15:02:45  profilanswer
 

t'inquiètes pas, je comprends bien les échappements et patterns, c pas ça mon prob! mon prob est qu'il y a une ambiguité :
 
si tu recherche un parenthèse dans une chaine, et que tu veux capturer  ce qu'il y a dedans, genre "(chaine)' et je veux récupérer (chaine), je fais koi comme pattern??
\\((chaine)\\) ou ((chaine)) ??
 
et enfin dernier emmerdement en date, la fonction split (String regex) de la classe String, ben elle veut rien savoir! y me dit qu'il la trouve pas cet andouille de compilateur! (ennervement inside, désolé!)
 
mais je vous remercie tous de votre aide!  [:spikler]

n°378290
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 30-04-2003 à 15:08:01  profilanswer
 

arghbis a écrit :

t'inquiètes pas, je comprends bien les échappements et patterns, c pas ça mon prob! mon prob est qu'il y a une ambiguité :
 
si tu recherche un parenthèse dans une chaine, et que tu veux capturer  ce qu'il y a dedans, genre "(chaine)' et je veux récupérer (chaine), je fais koi comme pattern??
\\((chaine)\\) ou ((chaine)) ??


Méthode simple : écris ta regexp sur papier telle qu'elle devrait être. Ensuite, double tous les \ qui pourraient être présents.
Exemple :  
Je veux trouver tous les mots encadrés par [: et ]  (ça devrait donner une image qui s'affiche pas, là, because forum de Joce [:ddr555]  
La regexp correspondante sera \[:.+\]
Donc dans une String, on aura : String pattern = "\\[:.+\\]";
 
Voilou.

arghbis a écrit :


et enfin dernier emmerdement en date, la fonction split (String regex) de la classe String, ben elle veut rien savoir! y me dit qu'il la trouve pas cet andouille de compilateur! (ennervement inside, désolé!)


Balance l'erreur du compilo.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°378317
arghbis
salops de dauphins
Posté le 30-04-2003 à 15:14:54  profilanswer
 

bon ben là il a pu l'air de gueuler contre split, mais contre autre chose!
 
bon ben je cherche! donc pour le coup de () ça serait (\\(chaine\\)) ??
 
je trouve ça vraiment compliqué les regexp en java, qd c si simple dans d'autres langages (perl par exemple!)

n°378324
El_gringo
Posté le 30-04-2003 à 15:16:31  profilanswer
 

arghbis a écrit :

bon ben là il a pu l'air de gueuler contre split, mais contre autre chose!
 
bon ben je cherche! donc pour le coup de () ça serait (\\(chaine\\)) ??
 
je trouve ça vraiment compliqué les regexp en java, qd c si simple dans d'autres langages (perl par exemple!)


 
C surement quasiment aussi simple. Y a juste à doubler les \ qui doivent apparaitre dans le pattern.

n°378371
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 30-04-2003 à 15:30:16  profilanswer
 

El_gringo a écrit :


C surement quasiment aussi simple. Y a juste à doubler les \ qui doivent apparaitre dans le pattern.


+1
En fait, ça vient du fait que ta regexp en Perl sera pas contenue dans une chaîne encadrée par des guillemets, contrairement à Java.
Donc faut faire un peu plus gaffe quand tu construis ta regexp puis que tu l'"exportes" en Java :)


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°378405
arghbis
salops de dauphins
Posté le 30-04-2003 à 15:35:41  profilanswer
 

bon ben alors je retire un tit peu de ce que j'ai dit (mais pas tout qd même!  :na: )
 
le principal problème que j'avais (outre ces **** de \) , c ke le compilo trouvait pas la moitié des fonctions regexp!
 
la raison : j'ai installé gcj paske je doit compiler du code natif pour un autre truc, et ce con m'a remplacé le javac du sdk par le sien, qui ne trouve pas la moitié des fonctions java!  :fou:  :fou:  
 
bon ben je crois que ça va aller maintenant!!
 
 [:spikler]

n°378776
arghbis
salops de dauphins
Posté le 30-04-2003 à 17:55:52  profilanswer
 

recoucou!! c moi que revoilou!
 
bon ben il en veut pas de mes parenthèses!  
 
que je mettes ou non un \\ , il pense que ce sont des parenthèses de regroupement!!
 
comment faire? utiliser le code ascii?? je le connais pas moi...
 
help please!

n°378787
TBone
Pouet.
Posté le 30-04-2003 à 18:17:43  profilanswer
 

crée ta regexp en dhors de java et teste-la
 
une fois qu'elle répond à tes besoins, transforme-la pour qu'elle rentre dans un String java.
 
mais c'est vrai que parfois ça te file une regexp de pendu pour rien :)


---------------
As the plane took off, the pilot turned to the co-pilot and said, “Have you ever flown solo?” Co-pilot: No. Typically I fly much higher than this.
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  fonction équivalente au 'split' de perl? [pb regexp]

 

Sujets relatifs
Comment faire pr q'1 variabl d'1 fonction soit utilisable ailleur?[C] pointeurs de pointeurs en retour de fonction...
kkun pourrait m'expliker comment marche cette fonction kbhit ? PHP : creation d'une fonction a nombre de parametres variables ?
[C] copier un fichier de données formatées via une fonction externe...[PHP/JS] Grande chaine de car dans une fonction js.
[Perl/Tk] TkZinc, le canvas nouvelle generation ![C] probleme avec fonction system()
[Perl/Tk] Les VRAIS curseurs de souris de windows, ou ki sont??[Perl] Optimisation
Plus de sujets relatifs à : fonction équivalente au 'split' de perl? [pb regexp]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR