IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Découpage de string


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 66
    Points : 39
    Points
    39
    Par défaut Découpage de string
    Bonjour ,

    Je suis débutant en Java, travaillant en ce moment sur le traitement de données arrivant sur un port série , je souhaite découper ce que je reçois par la méthode readLine() .

    Les infos reçue sont de la forme "A,0350" par exemple, je pensait donc utiliser la méthode substring de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String valeur = null;
    String val = null;
    valeur = port.readLine();
    val = valeur.substring(2,6);
    Je pensais récupérer les 4 dernier caractère pour les utiliser ensuite dasn une formule mais l'erreur suivante se présente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.StringIndexOutOfBoundsException: String index out of range: 6
    Je ne comprend pas ...

    Et je vous remercie pour toute vos réponses !

  2. #2
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Points : 24
    Points
    24
    Par défaut
    Prends garde à savoir sur quelle chaine de caractères tu manipules : est elle un objet null ? combien de caractères elle contient ?
    La doc de Heimdal est le meilleur exemple pour résumer la méthode substring.

    Penses peut-être à StringTokenizer :

    http://java.sun.com/j2se/1.5.0/docs/...Tokenizer.html

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Manifestement, les infos ne sont pas de la forme "A,0350" et elles font moins de 6 caractères.

    Vérifie.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Points : 554
    Points
    554
    Par défaut
    Peut être qu'en utilisant la méthode split tu t'en sortirai mieux (car en effet, avec la méthode substring, si à un moment tu n'as que 3 caractères à la fin au lieu de 4, ben tu te prends une exception).

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut !

    Allez on oublie nos vieilles habitudes et on utilise des vrais outils qui fonctionnent : les regex.

    Ce code devrait faire ton bonheur, essaye le pour voir !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    package test;
     
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
     
    public class Test {
     
    	public static void AnalyseChaine(String chaine)
    	{
    		Pattern pattern = Pattern.compile("^(\\w+),(\\d+)$");
    		Matcher matcher = pattern.matcher(chaine);
    		if(matcher.matches()) {
    			System.out.println("Trouvé ! Mot : "+matcher.group(1)+" - Chiffre :"+matcher.group(2));
    		}
    		else
    		{
    			System.out.println("Non valide.");
    		}
    	}
    	public static void main(String[] args) {
    		Test.AnalyseChaine("A,0350");
    		Test.AnalyseChaine("Salut,0350");
    		Test.AnalyseChaine("A,45456545");
    		Test.AnalyseChaine("YeahJojo,");
    		Test.AnalyseChaine("Alohes,4545685");
    		Test.AnalyseChaine("Les regex c'est magique !");
    	}
     
    }
    Find me on github

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 66
    Points : 39
    Points
    39
    Par défaut
    salut tout le monde,

    Voila j'ai pu résoudre mon problème de découpage !

    En effet le problème venait de la variable dans laquelle je récupérais mon découpage de String, cette varibale n'était pas dans ma boucle infini.

    Du coup j'ai placé cette variable en globale ce qui ma permis de récupérer la valeur en continue sans générer de dépassement.

    Pour mieux comprendre , je vous laisse jeter un coup d'oeil à mon programme :
    ( programme qui me permet de récupérer une température via une liaison série simplement)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    import java.io.*;
     
    public class COM implements Runnable{
        static	int Vlu = 0;/**Tension d'entrée en Volt*/
        static	int R = 1800;/**Résistance du pont diviseur en amont de la thermistance */
        static java.io.RandomAccessFile port;
        static Thread myThread=null;
        static String q = null;
     
    	public	COM(){
    		 myThread = new Thread(this);/**initialisation*/
    	}
     
    	public void start(){
    		try {
    		   port=new java.io.RandomAccessFile("COM3","rwd");/**Choix du port et ouverture du fichier en mode écriture/lectue aléatoire*/
    		   port.writeBytes("\r\n");/**écrit sur le port*/
    		   port.writeBytes("c,1,0,0,1\r\n");
    		   port.writeBytes("T,1000,1\r\n");
    		}
    		catch (Exception e) {
    		System.out.println("start "+e.toString());
    		}
            myThread.start();/**lancement du thread*/
    	}
     
    	public void run() {
    		  System.out.println("lecture COM...");
    		  for(;;){
    			  String st = null;
    			try {
    				st=port.readLine();
    				q = st.substring(2,st.length());/**découpage du string d'entrée*/
    				Convtemp();/**méthode conversion de la température */
    				} catch (IOException e) {System.out.println(e.getMessage());}
    			  			System.out.println(st);
    		  }		
     
    	 }
    	public void Convtemp(){
     
    		try {
    			Vlu = Integer.parseInt(q);/**Cast du string en int */
     
    		/*************Calcul de la température ambiante        *******/
    		/**/    float Vacq = (float)(Vlu*5)/1024;                       /**/
    		/**/    float Rth = (Vacq*R)/(5-Vacq);                          /**/
    		/**/    double temp = -25.40*Math.log(Rth)+ 199.04;/**/
    		/****************************************************/
     
    			System.out.println("vacq ="+Vacq);
    			System.out.println("Rth ="+Rth);
    			System.out.println("T° ="+temp);
    		} catch (Exception e) {System.out.println("temp conv:"+e.getMessage());}
    					}
     
    	public static void main(String[] args) {
    			  COM UBW= new COM();
    			  UBW.start();	  
    	}
    }
    Nouvel objectif : je cherche à faire en sorte que le port et les paramètres "c,1,0..." puissent être rentré en ligne de commandes par l'utilisateur au lancement du programme.

    Une piste...?

    Encore merci pour l'aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Découpage de string
    Par makia42 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 21/04/2010, 11h28
  2. [Découpage chaine String et decalages binaires]
    Par moulefrite dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/12/2008, 15h27
  3. [VB 6.0]Travailler sur un String (découpage)
    Par t'djinn dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 13/06/2006, 16h39
  4. Découpage dun string dans l'espace
    Par Clad3 dans le forum OpenGL
    Réponses: 4
    Dernier message: 24/03/2005, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo