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

avec Java Discussion :

découper une chaîne de caractère


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 136
    Points : 52
    Points
    52
    Par défaut découper une chaîne de caractère
    Bonsoir a tous !
    1h du matin et je cherche toujours une solution ,je veux decoupé une chaine de caractère en prenant compte du séparateur j'ai essayé avec le Split mais il avale le séparateur indiqué
    par exemple , ma chaine : Matin je dois avoir Ma Tin ou bien si ma chaine : Ma,tin je dois avoir Ma , Tin

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Points : 203
    Points
    203
    Par défaut
    Salut,

    donne plus de details et si possible ton extrait de code responsable du split. On comprend pas trop ce que tu attends a recevoir.

  3. #3
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Points : 7 653
    Points
    7 653
    Billets dans le blog
    55
    Par défaut
    oui avec split tu dois réinjecter ton séparateur avalé comme ça :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    String chaine = "je,mange,des,pommes";
    		System.out.println(chaine);
    		String[] tabChaines = chaine.split(",");
    		int longueur = tabChaines.length;
    		if (longueur > 0)
    		{
    			System.out.print(tabChaines[0] );
    			for (int i=1 ; i < longueur ; i++)
    			{
    				System.out.print(" , " + tabChaines[i]  );
    			}
    		}

  4. #4
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Points : 7 653
    Points
    7 653
    Billets dans le blog
    55
    Par défaut
    Désolé yonito, je n'avais pas vu ta réponse

    Mais je la partage, le cahier des charges c'est important. ça doit être précis

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 136
    Points : 52
    Points
    52
    Par défaut
    Non c'est pas ça !! et si j'ai plusieurs séparateur !
    voila ce que je veux a chaque mot collé avec un non mot genre separateur iil le coupe en plus de l'espace
    voici ma chaine
    Public static void main (String[] args) == ;
    je veux que mon tabmot contient
    tabmot[0] public
    tabmot[1] static
    tabmot[2] void
    tabmot[3] main
    tabmot[4] (
    tabmot[5] String
    tabmot[6] [
    tabmot[7] ]
    tabmot[8] args
    tabmot[9] )
    tabmot[10] ==
    tabmot[1] ;

  6. #6
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Points : 7 653
    Points
    7 653
    Billets dans le blog
    55
    Par défaut
    Dans ton exemple ton separateur est " "
    suffit de faire :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                    String chaine = "je mange des pommes";
    		System.out.println("la chaine avant le split : " + chaine);
    		String[] tabChaines = chaine.split(" ");
    		int longueur = tabChaines.length;
    		if (longueur > 0)
    		{
    			System.out.println("les sous-chaines après le split : ");
    			for (int i=0 ; i < longueur ; i++)
    			{
    				System.out.println("tab[" + i + "] = "+ tabChaines[i]);
    			}
    		}
    et ça donne :
    la chaine avant le split : je mange des pommes
    les sous-chaines après le split :
    tab[0] = je
    tab[1] = mange
    tab[2] = des
    tab[3] = pommes

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Bah non, ce n'est pas vraiment l'espace le séparateur (entre String et [, il n'y a pas d'espace).

    On peut utiliser " +|((?=[ \\(\\)\\[\\]])|(?<=[ \\(\\)\\[\\]]))" comme regexp, mais ça permet d'avoir aussi tous les séparateurs (sous forme de chaîne vide), mais on peut filtrer facilement. Il y a aussi " +|((?=[\\(\\)\\[\\]])|(?<=[\\(\\)\\[\\]]))", mais ça laisse certaines chaînes vides (entre main et la parenthèse) aussi.

    Mais comme je l'ai déjà dit dans un autre discussion (et il me semble que je n'étais pas le seul), un automate à état est plus adapté pour ce genre de parsing : tu vas avoir d'autres cas (de code Java) qui ne fonctionneront pas.

  8. #8
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Ce n'est pas parce que tu changes de discussion que les réponses vont changer
    Tu vas devoir utiliser un automate à états pour gérer tes expressions régulières.
    Avec des expressions régulières, tu vas être obliger de lister toutes les possibilités et combinaisons possibles, les bonnes comme les mauvaises. Alors qu'avec un analyseur lexical standard, un automate à état, tu vas lister uniquement les bonnes combinaisons, ce que reconnaîtra ton automate.
    Non seulement les expressions régulières ne sont pas une bonne idée dans ce cas précis, mais en plus tu ne pourras jamais t'en sortir sans une usine à gaz autour en ajoutant des expressions régulières construites dynamiquement.

    Comme déjà demandé dans l'autre discussion, donne nous précisément l'énoncé du problème. Soit tu es passé à côté de quelque chose, soit tu as très mal exprimé ton besoin.

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 136
    Points : 52
    Points
    52
    Par défaut
    Merci pour vos réponse Joel et Dinobogan
    l’énoncé du problème c'est de réaliser un analyseur lexical

    Bon pour le String[] j'ai réussi a la découpé grace a la méthode .find()
    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
     
          for (int i = 0; i < a11.size(); i++) {
    		    	    String s = (String) a11.get(i);
     
    		      Matcher m = Pattern.compile(ExpRegclef).matcher(s);
    						      while (m.find()) {
    		    	  if (a1.contains(m.group())== false)
    		    	   a1.add(m.group());
    		    	 }}
    							System.out.println( "les mots clé sont :");
    		for( int i  = 0; i < a1.size(); i++)
    	    {
    		      System.out.println( a1.get(i));
    		    }
    		for (int i = 0; i < a11.size(); i++) {
    		    String s = (String) a11.get(i);
    			Matcher k = Pattern.compile(ExpRegsep).matcher(s);
    		  while (k.find()) {
    	    	  if (a2.contains(k.group())== false)
    	    	   a2.add(k.group());
    	    	 }}
    						System.out.println( "les sep sont :");
    	for( int i  = 0; i < a2.size(); i++)
      {
    	      System.out.println( a2.get(i));
    	    } 
     
    	for (int i = 0; i < a11.size(); i++) {
    	    String s = (String) a11.get(i);
     
    	Matcher r = Pattern.compile(ExpRegOp).matcher(s);
    	while (r.find()) {
      	  if (a3.contains(r.group())== false)
      	   a3.add(r.group());
      	 }}
    					System.out.println( "les operateurs sont :");
    for( int i  = 0; i < a3.size(); i++)
    {
        System.out.println( a3.get(i));
      }
    et pour les identificateurs je l'ai fait avec .matcher()

    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
     
     Pattern l = Pattern.compile(ExpRegId);
    for (int i = 0; i < a11.size(); i++) {
        String s = (String) a11.get(i);
     
        if (l.matcher(s).matches()){
        	if (( a1.contains(s.toLowerCase())== true)&& ( a1.contains(s)== false)){ 
        		System.out.println("mot clé mal formé " +s);
        	}
        else if ( a1.contains(s)== false)
      	   a0.add(s);
      	 }}
      				System.out.println( " les identificateurs sont ");
      for( int i  = 0; i < a0.size(); i++)
      {
      System.out.println( a0.get(i));
      }
    maintenant es ce que je peux utiliser les deux méthodes pour qu'a chaque mots trouvé il le met dans une autres liste on va l'appeler a44 tout en gardant l'ordre des élément de ma liste a11
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      String[] items = chaine.split("\\s+");
    		      List<String> a11 = Arrays.asList(items);
     
    		      for( int i  = 0; i < a11.size(); i++)
    		      {
    			    System.out.println( a11.get(i));}
    Si la reponsé est Non ! pour l'automate je fais comment ?

Discussions similaires

  1. Découper une chaîne de caractères
    Par gege2061 dans le forum Langage
    Réponses: 9
    Dernier message: 07/03/2008, 20h59
  2. [Tableaux] Découper une chaîne de caractères
    Par mix_35 dans le forum Langage
    Réponses: 5
    Dernier message: 17/03/2007, 03h06
  3. Découper une chaîne de caractères
    Par The Lord of Nesquik dans le forum C
    Réponses: 5
    Dernier message: 04/02/2007, 01h20
  4. [VBA-E] découper une chaîne de caractère
    Par jagwar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/07/2006, 15h07
  5. Comment découper une chaîne de caractères en VBA
    Par TomPad dans le forum Access
    Réponses: 3
    Dernier message: 23/06/2005, 10h58

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