Help, j'en peux plus : string.split

Help, j'en peux plus : string.split - Java - Programmation

Marsh Posté le 05-05-2005 à 19:26:07    

Bonsoir, j'en ai marre, j'ai lu plein de doc sur le net, les tutoriels de sun, les recherches sur les forums, etc...
mais je pete un cable et mon cerveau ralentit.
 
Je fais appel à votre expérience, forcément plus grande que la mienne en java.
 
J'ai une string de la forme "Point(10, 15)"
je veux récupérer les nombres 10 et 15 comme entiers.
 
Le mieux que j'ai réussi à produire :  
 
 String[] separation = value.split("Point\\(|,|\\)" );
  int x = Integer.parseInt(separation[1]);
  int y = Integer.parseInt(separation[2]);
  return new Point(x,y);
 
 
avec value, une string de la forme décrite plus haut.
Dans ce cas précis, la récupération du 'y' foire, vu que la string est " 15", il y a un blanc devant le nombre et il aime pas.
 
En fait avec mon split actuel, je récupère une chaine vide "" comme premiere case de mon split, c'est assez dégueux je trouve. J'aimerai bien que quelqu'un m'explique comment arriver à un meilleur résultat.
 
Merci aux âmes charitables qui auront pitié de moi :jap:

Reply

Marsh Posté le 05-05-2005 à 19:26:07   

Reply

Marsh Posté le 05-05-2005 à 20:48:36    


Réponse partielle : myString.trim() doit permettre d'enlever les espaces dans myString.
 
Nicolas

Reply

Marsh Posté le 05-05-2005 à 21:36:00    

Le plus propre est peut-être d'utiliser les expressions régulières.
 
Un exemple ci-dessous, avec 2 méthodes.
Tutoriel : cf. FAQ de ce site
 
(EDIT)

Code :
  1. import java.util.regex.*;
  2. public class Exemple027_regexp {
  3.    
  4.     public static void getTwoIntFromString1(String value) {
  5.         System.out.print("méthode 1 : "+value+" -> " );
  6.         Pattern p = Pattern.compile("[0-9]+" );
  7.         Matcher m = p.matcher(value);
  8.         if (! m.find()) {} // pb à traiter, par exemple en levant une exception
  9.         int x = Integer.parseInt(m.group());
  10.         System.out.print(x+" et " );
  11.         if (! m.find()) {} // pb à traiter, par exemple en levant une exception
  12.         int y = Integer.parseInt(m.group());
  13.         System.out.println(y);
  14.     }
  15.    
  16.     public static void getTwoIntFromString2(String value) {
  17.         System.out.print("méthode 2 : "+value+" -> " );
  18.         String[] res = value.split("\\D+",0); // \D = non-digit
  19.         int x = Integer.parseInt(res[1]); // res[0] est une chaîne vide
  20.         System.out.print(x+" et " );
  21.         int y = Integer.parseInt(res[2]);
  22.         System.out.println(y);
  23.     }
  24.    
  25.     public static void main(String[] args) {
  26.         getTwoIntFromString1("Point(10, 15)" );
  27.         getTwoIntFromString2("Point(10, 15)" );
  28.     }
  29.            
  30. }


Sortie :

méthode 1 : Point(10, 15) -> 10 et 15
méthode 2 : Point(10, 15) -> 10 et 15


Message édité par Nicolas_75 le 05-05-2005 à 22:33:34
Reply

Marsh Posté le 06-05-2005 à 11:07:44    

J'ai un peu plus simple :
 

Code :
  1. public Point getPoint(String s) {
  2.     Pattern p = Pattern.compile("Point\\(([0-9]+),\\s*([0-9]+)\\)" );
  3.     Matcher m = p.matcher(s);
  4.     if (m.matches()) {
  5.         int x = Integer.parseInt(m.group(1));
  6.         int y = Integer.parseInt(m.group(2));
  7.         return new Point(x, y);
  8.     } else {
  9.         return null;
  10.     }
  11. }


Message édité par Cherrytree le 06-05-2005 à 11:10:45

---------------
Le site de ma maman
Reply

Sujets relatifs:

Leave a Replay

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