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

Collection et Stream Java Discussion :

[StringTokenizer] Découper une chaine de caractere


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Par défaut [StringTokenizer] Découper une chaine de caractere
    bonjour, voila en faite j'ai une longue chaine de caractere, avec donc plusieur ligne que je doit faire communiquer au serveur par une connexion socket. Or lors du transfert le buffer ne transmet que la premiere ligne à cause des saut de lignes..
    donc j'aimerais savoir comment je fais pour découper ma chaine de caracetere à chaque saut de ligne '\n'. Je pourrais ainsi concaténer toutes les ligne dans un string pour en faire qu'une ligne et envoyer au serveur.
    J'ai essayer la methode split, mais je n'ai pas réussis...

    voici ce que j'ai essayer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    		String mes=tMessage.getText();
    		String []mes1 = mes.split("\n");
    		String mesfinal="";
    		int i=1;
    		while(i<=(mes1.length-1))
    		 {
    		  mesfinal=mesfinal+mes1[i];
    		  i++;
    		  }
         		System.out.println(mesfinal);
       output.println(mesfinal);
    merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 304
    Par défaut
    Cherche peut-être du côté de StringTokenizer

    exemple d'un de mes codes pour l'utilisation:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String nomserveur = source.getName();       
            StringTokenizer serveur = new StringTokenizer(nomserveur, "\n"); 
            String serveurvalue = serveur.nextToken();

  3. #3
    Membre confirmé Avatar de al85
    Profil pro
    Inscrit en
    Février 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 158
    Par défaut
    avec split il faut utiliser des expressions régulières, ce n'est pas un domaine que je maitrise particulierement, je ne sais pas comment faire pour spliter sur les \n, mais pour spliter sur des points, c'est comme ca : split("[.]");
    donc surement que split("[\n]"); doit marcher.

    j'espere que ca t'a aidé un peu.

  4. #4
    Membre éclairé
    Inscrit en
    Décembre 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 63
    Par défaut
    tu devrais utiliser streamtokenizer par exp si je veut recuperer des entiers dans un fichier

    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
    class LireEntiers
    {
      public static void main (String[] argv) throws IOException
      {
        int somme = 0;
        FileReader fichier = new FileReader(argv[0]);
     
        StreamTokenizer entree = new StreamTokenizer(fichier);
        while(entree.nextToken() == StreamTokenizer.TT_NUMBER)
          {
    	somme += (int)entree.nval;
          } 
        System.out.println("La somme vaut : " + somme);
        fichier.close();
      }
    }

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Par défaut
    merci pour vos réponse mais le pb est tjs là!!!
    j'ai essayer les deux methode ==> split et StrinTokenrizen
    et pr les deux j'arrive a séparer mes lignes et les avoirs dans chaque ligne du tableau, mais le probleme apres c'est que je peux pas concatener les chaine, lorsque j'esssaye de le faire soit j'ai que la premiere ligne, soit la derniere, soit la premiere et la derniere...mais j'ai pas lensemble de mes ligne concaténées l'une apres l'autre!!!!!

    je vous met mon codes si vous pouvez encor m'aider.. :
    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
     
    		String mes=tMessage.getText();
    		String []mes1 = mes.split("[\n]");
    		String mesfinal="",msg,msg2;
    		int i=0;
    		System.out.println("taillllllle="+mes1.length);
    		while(i<=(mes1.length-1))
    		 {
    		  mesfinal=mesfinal.concat(mes1[i]);
    		  System.out.println(i+"="+mes1[i]);
    		  i++;
    		  }
    		    msg2=mes1[0].concat(mes1[1]).concat(mes1[2]);
         		System.out.println("final"+mesfinal+" message="+msg2);
     
            StringTokenizer serv = new StringTokenizer(mes, "\n"); 
            String serveurvalue1,serveurvalue2,serveurvalue3;
            serveurvalue1=serv.nextToken();
            System.out.println("=========>"+serveurvalue1);
            serveurvalue2=serv.nextToken();
            System.out.println("=========>"+serveurvalue2);
            serveurvalue3=serv.nextToken();
            System.out.println("=========>"+serveurvalue3);
            msg2=serveurvalue1+"==>"+serveurvalue2+"==>"+serveurvalue3;
            System.out.println("msg2="+msg2);

    voilà il ya surement un "truc " à propos de la concaténation de chaine de caractere que j'ignore car je trouve ça bizarre...

    merci d'avance pour votre future aide.[/code]

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Par défaut
    je viens aussi d'essayer la methode avec StringBuffer, car elle est conseiller pr la concaténation des chaine de caractere, mais tjs le meme probleme...

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Par défaut
    Salut,

    Essaye plutot ce code :

    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
     
    String mes=tMessage.getText(); 
    String []mes1 = mes.split("[\n]"); 
    String mesfinal="",msg,msg2; 
     
    System.out.println("taillllllle="+mes1.length); 
     
    for (int i = 0 ; i < mes1.length ; i++){ 
            mesfinal+=mes1[i]; 
            System.out.println(i+"="+mes1[i]);  
    } 
     
    msg2=mes1[0] + mes1[1]+mes1[2]; 
    System.out.println("final"+mesfinal+" message="+msg2); 
     
    StringTokenizer serv = new StringTokenizer(mes, "\n"); 
    String serveurvalue1,serveurvalue2,serveurvalue3; 
    serveurvalue1=serv.nextToken(); 
    System.out.println("=========>"+serveurvalue1); 
    serveurvalue2=serv.nextToken(); 
    System.out.println("=========>"+serveurvalue2); 
    serveurvalue3=serv.nextToken(); 
    System.out.println("=========>"+serveurvalue3); 
            msg2=serveurvalue1+"==>"+serveurvalue2+"==>"+serveurvalue3; 
    System.out.println("msg2="+msg2);
    A+

  8. #8
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Tout à fait d'accord avec chicorico sur le dans la boucle.
    Sinon, tu pourrais essayer le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String mes=tMessage.getText(); 
    String message = mes.replaceAll("\n", " ");
    Cela te remplace les retour ligne par des espaces.

  9. #9
    Membre expérimenté Avatar de @ldehan
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Par défaut
    Citation Envoyé par Regis.C
    Sinon, tu pourrais essayer le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String mes=tMessage.getText(); 
    String message = mes.replaceAll("\n", " ");
    Cela te remplace les retour ligne par des espaces.
    Ca t'eviterait de séparer pour concatener derrière.

    tu peux même insérer autre chose qu'un espace pour pouvoir remettre les retours lignes apres.

    moi j'utilise généralement "|" ou "#". a toi de choisir le caractère que tu utilises selon les chaines que tu traites

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Par défaut
    merci pour vos réponse, le découpage avec split ou tokenrizen marche et meme replaceAll c'est très bien, mais je ne comprend pas une chose qui commence à m'énerver un peu.. (methode replaceAll)
    lorsqu'il s'agit de chaine constante que j'ai moi-meme créer:
    ex=
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String msg="je n'arrive \n pas à\n resuodre ce pb\";
    msg=msg.replaceAllreplaceAll("\n", "#");
    J'obtient bien le résultat attendu=
    "je n'arrive # pas à# resuodre ce pb#"

    Mais dans mon programme, la chaine de caracetere viens d'un TextArea, voici la partie de mon code :

    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
     
    try {
    	    //input = new BufferedReader(new InputStreamReader(System.in));
    	    input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    	    output = new PrintWriter(socket.getOutputStream(),true);
     
    	    Accueil.append("\nOn se connecte avec comme nom "+tFrom.getText());
     
    		String mes=(tMessage.getText()).replaceAll("\n", "#");
    		System.out.println("mail="+mes);
     
     
    	    // get user input and transmit it to server
     
    		//lineToBeSent =tFrom.getText()+"#"+tSubject.getText()+"#"+tMessage.getText();
    		output.println("#envoi#");
    		output.println(tFrom.getText());
    		output.println(tTo.getText());
    		output.println(tSubject.getText());
    	    output.println(mes);	
     
     
     
         }
    	catch (IOException e) 
    	{
    	    System.out.println(e);
    	}
    Ce texte je le récupere du coté serveur avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Message=input.readLine();				 Message=Message.replaceAll("#", "\n");
    Mais voila quand j'essaye d'afficher le résultat du replaceAll dans ce cas la mem du coté client il m'affiche un bout de la chaine et en plus dans le désordre par exemple :
    lorsque 'ecrit dans le champs de texte:
    Ligne1
    Ligne2
    Ligne3

    il m'affiche:

    #Ligne3gne1

    Voila mon probleme!!!

    merci.

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 304
    Par défaut
    Quel est le type de Message???

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Par défaut
    désolé je pensais que tu demandai seulement Message..
    voila:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tMessage     = new TextArea("taper ici votre message...",5,40) ;

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 304
    Par défaut
    et en décomposant et en faisant des affichages pour voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String mes = tMessage.getText();
    System.out.println(mes);
    String bonmes = mes.replaceAll("\n", "#");
    System.out.println(bonmes);

  14. #14
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Commences par décomposer le texte que tu reçois dans ton readLine() en faisant des System.out.println("message = "+message);

    A partir de là, tu verras sur quoi tu dois découper ou remplacer.

  15. #15
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Par défaut
    merci pour vos effort,
    j'ai trouvé repris une autre methode en faite:
    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
     
    input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    	    output = new PrintWriter(socket.getOutputStream(),true);
     
    	    Accueil.append("\nOn se connecte avec comme nom "+tFrom.getText());
     
    		//String mes=new String((tMessage.getText()).replaceAll("\n","#"));
    		//System.out.println("mail="+mes);
     
    	    String mes=tMessage.getText();
    	    //pour récupéer le nombre de ligne du message
    	    //je découpe à chaque saut de ligne puis on récupere le nombre de ligne du tableau
    	    String []mes1 = mes.split("\n"); 
            int nb_ligne=mes1.length; 
     
    	    // on récupere les "input" du client et les transmet au serveur
     
    	 	output.println("#envoi#");
    		output.println(tFrom.getText());
    		output.println(tTo.getText());
    		output.println(tSubject.getText());
    		//on envoie le nombre de ligne du mail pour faire le bon nombre de input.readline 
     		//pour pouvoir récuperer l'ensemble du mail
    		output.println(nb_ligne);
    	    output.println(mes);
    coté serveur je récupere le nombre de ligne et je fait autant de readline et ça marche!!

    merci a++

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. Découper une chaine de caracteres
    Par Jibees dans le forum C
    Réponses: 3
    Dernier message: 01/09/2006, 19h14
  3. Extraire un nom d'une chaine de caractere
    Par iamspacy dans le forum Linux
    Réponses: 4
    Dernier message: 03/05/2004, 21h34
  4. Réponses: 2
    Dernier message: 30/03/2004, 11h31
  5. Controler une chaine de caracteres ou d'entiers?
    Par Le druide dans le forum C
    Réponses: 6
    Dernier message: 25/09/2003, 08h48

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