[Java] Extraire informations d'une String

Extraire informations d'une String [Java] - Java - Programmation

Marsh Posté le 06-01-2006 à 18:11:54    

Bonjour,
J'ai une String du genre : nom1(val1) ou nom2(val1,val2)
par exemple cette string peut valoir :  
- random(1.5)
- degree(5.8,5.1)
- ...
Il faut que je sépare cette string en 2 ou 3 string suivant les cas :
- string1 = random ; string2 = 1.5
- string1 = degree ; string2 = 5.8 ; string3 = 5.1
 
Je ne sais pas comment faire, le but étant de faire le plus simplement possible.
 
Merci d'avances pour vos réponses.

Reply

Marsh Posté le 06-01-2006 à 18:11:54   

Reply

Marsh Posté le 06-01-2006 à 18:21:07    

il faut parser ta chaine (à moins qu'on puisse utiliser des regulars)
1- détecter l'ouverture de la parenthèse "(" via last_indexof()
2- avec substring(), tu devras pouvoir obtenir le nom de la variable (random, degree...)
puis tu répètes les opérations (quelques modifications sont nécessaire)   pour obtenir les valeurs.

Reply

Marsh Posté le 06-01-2006 à 19:03:25    

J'ai fait :

Code :
  1. // compilation de l'expression reguliere
  2. Pattern pattern1 = Pattern.compile("/(\\w+)(\\((\\d+)(,(\\d+))?\\))?/" );
  3. // création d’un moteur de recherche
  4. Matcher matcher1 = pattern1.matcher(federation1.getReseau().getGraphCreationAlgorithm());
  5. System.out.println(federation1.getReseau().getGraphCreationAlgorithm());
  6. * String algoTradersQuantity = matcher1.group(1);
  7. String val1TradersQuantity = matcher1.group(3);
  8. String val2TradersQuantity = matcher1.group(5);


Mais j'ai l'erreur " java.lang.IllegalStateException: No match found"  à la ligne *. Je ne comprend pas pourquoi.

Reply

Marsh Posté le 06-01-2006 à 19:28:17    

avec une regular comme ceci :

"/^(\w+)\((\d+),(\d+)\)/"


attention ça ne marche (si ça marche :D ) uniquement pour une chaîne décrite de cette manière :
variable(valeur1,valeur2)


Message édité par jlighty le 06-01-2006 à 19:29:20
Reply

Marsh Posté le 07-01-2006 à 11:52:07    

J'ai écrit la regexpr pour extraire les données :
 

Code :
  1. /  (\w+)  (  \(  (\d+)  ( ,  (\d+) )?  \)  )?  /


 
J'ai fait :

Code :
  1. String[] champs = chaine.split("/(\\w+)(\\((\\d+)(,(\\d+))?\\))?/" );


Mais j'obtiens juste comme résultat :
champs[0] = degree(5.8,5.1)
champs[1] = null

Reply

Marsh Posté le 07-01-2006 à 12:31:12    

Je ne comprend pas pourquoi ce code ne marche pas :  
 

Code :
  1. // compilation de l'expression reguliere
  2. Pattern pattern1 = Pattern.compile("/(\\w+)(\\((\\d+)(,(\\d+))?\\))?/" );
  3. // création d’un moteur de recherche
  4. Matcher matcher1 = pattern1.matcher(s1);
  5. System.out.println(s1); -> degree(2,0)
  6. System.out.println(matcher1.groupCount()); -> 5
  7. System.out.println(matcher1.group(0)); -> java.lang.IllegalStateException: No match available


 
Il trouve bien le bon nombre groupe, mais des que j'accede au 1er groupe j'ai une erreur. mbre groupe, mais des que j'accede a 1 groupe j'ai une erreur.


Message édité par hugo25 le 07-01-2006 à 14:16:14
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed