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 chaine de caractère


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Découper une chaine de caractère
    Bonjour, je vous explique mon cas.
    J'ai une chaine de caractère que je récupère dans mon LDAP
    CN=toto,OU=Manager,DC=Compagnie,DC=fr

    Je souhaite récupérer le mot "toto". donc j'ai réalisé le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	public String[] getGroupsNames() {
    		if (null == memberOf || memberOf.size() == 0) return null;
     
    		String[] names = new String[memberOf.size()];
    		for (int i=0; i<memberOf.size(); i++) {
    			String name = memberOf.get(i).substring(3,4); 
     
                            //extraction du nom du groupe depuis la chaine
                            CN=toto,OU=Manager,DC=Compagnie,DC=fr
                            names[i] = name;
    		}
    		return names;
    	}
    Quand j'exécute mon application j'obtiens bien "toto" mais imaginons maintenant que le CN soit plus grand ex: CN=tatatititoto,OU=Manager,DC=Compagnie,DC=fr

    lorsque j'exécute ceci, j'obtiens "tata" car mon substring ne prend que 4 caractères!

    Comment faire pour que mon substring puisse prendre entièrement le CN peut importe le nombre de caractères ?

    Je vous remercie d'avance

  2. #2
    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 : 42
    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
    Que contient la variable "membersOf" ? Comment est-elle construite ? J'imagine que c'est un ArrayList ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    "membersOf" représente un attribut LDAP qui me permet de récupérer la liste des groupes d'un utilisateur. C'est donc un arraylist car un utilisateur peut être membre de plusieurs groupes.

  4. #4
    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 : 42
    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
    Voici une possibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //le parametre est de type "CN=toto,OU=Manager,DC=Compagnie,DC=fr"
    public String getUser( String chaine )
    {
      for( String element : chaine.split( "," ) )
      {
        if( element.substring( 0, element.indexOf( '=' ) ).equals( "CN" ) )
        {
          return element.substring( element.indexOf( '=' ) + 1 );
        }
      }
      return null;
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    En réalité, je travail pour une société en tant que stagiaire et mon patron souhaiterais que j'utilise sa méthode.

    c'est à dire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public String[] getGroupsNames() {
    		if (null == memberOf || memberOf.size() == 0) return null;
     
    		String[] names = new String[memberOf.size()];
    		for (int i=0; i<memberOf.size(); i++) {
    			String name = memberOf.get(i).substring(3,4); 
     
                            //extraction du nom du groupe depuis la chaine
                            CN=toto,OU=Manager,DC=Compagnie,DC=fr
                            names[i] = name;
    		}
    		return names;
    	}

    Existe t-il un moyen avec la méthode affichait ci-dessus ?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par dos757 Voir le message
    En réalité, je travail pour une société en tant que stagiaire et mon patron souhaiterais que j'utilise sa méthode.
    Euh...
    Soit tu utilises sa méthode (nom = chaîne comprise entre le 3ème et le 7ème caractère), et donc tu ne récupères que les 4 premières lettres du nom indépendamment de sa longueur réelle.
    Soit tu réécris la méthode de manière plus "intelligente" (nom = tout ce qui est compris entre le signe '=' et le prochain signe ',') en t'inspirant par exemple du code proposé par dinobogan. Tu peux évidemment t'arranger pour conserver la même méthode getGroupsNames avec la même signature...

    Ce qui est sûr c'est que tu ne pourras pas modifier le comportement de ton code sans à un moment donné modifier le code Si la méthode de ton chef ne donne pas le résultat attendu, c'est qu'elle est mal implémentée et donc qu'il faut la corriger, chef ou pas chef.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Comment peut-on faire avec ma méthode ?

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Tu peux aussi regarder du côté de la méthode split de la classe String pour "éclater" ta chaine de caractère par rapport au signe = et au signe ,

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par dos757 Voir le message
    Comment peut-on faire avec ma méthode ?
    Que veux-tu dire par "utiliser sa méthode" ou "faire avec ma méthode" ?
    Si tu continues à utiliser cette méthode, sans la modifier, tu vas évidemment continuer à obtenir le même résultat... donc je ne comprends vraiment pas ta question

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup de votre aide!

    Ceci dit lorsque le résultat s'affiche

    au lieu d'obtenir "toto" ou "tototatatiti" j'obtient "Ljava.lang.String;@439708"

    est-ce normal ?

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par dos757 Voir le message
    Ceci dit lorsque le résultat s'affiche au lieu d'obtenir "toto" ou "tototatatiti" j'obtient "Ljava.lang.String;@439708"
    Si tu as modifié ton code, donne-le, on ne risque pas de deviner ce que tu as fait
    Au hasard : tu affiches un tableau de String au lieu d'afficher un String ?

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    je n'ai pas modifié mon code.

    L'erreur apparait lorsque je renseigne la ligne suivante dans la boucle for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String name = memberOf.get(i).substring(3,10);
    si je fait un "println" de cette ligne hors de ma boucle alors j'obtient bien le résultat "toto" !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	public String[] getGroupsNames() {
    		if (null == memberOf || memberOf.size() == 0) return null;
     
    		String[] names = new String[memberOf.size()];
    		for (int i=0; i<memberOf.size(); i++) {
    			String name = memberOf.get(i).substring(3,10); //  j'obtient [Ljava.lang.String;@439708]
    extraction du nom du groupe depuis la chaine CN=Easyteam,OU=EasyteamGroups,DC=easyteam,DC=fr
    			names[i] = name;
    			System.out.println(memberOf.get(i).substring(3,10));//J'obtient "tototototo"
    		}
    		return names;
     
    	}
    C'est un tableau de string et non un string

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    J'ai donc trouvé comment faire pour afficher le résultat voulou, le soucis c'est que j'ai toujours le bug "Ljava.lang.String;@439708" je pense qu'il s'agit d'un soucis de parcoure dans ma liste de string !
    mais bonne nouvelle lorsque je fait un println sa marche !

    voici mon code modifié, j'ai utilisé le indexof, et j'ai laissé 3 car CN= ne change pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	public String[] getGroupsNames() {
    		if (null == memberOf || memberOf.size() == 0) return null;
     
    		String[] names = new String[memberOf.size()];
    		for (int i=0; i<memberOf.size(); i++ ) {
    			String name = memberOf.get(i).substring(3,memberOf.get(i).indexOf(",")); // extraction du nom du groupe depuis la chaine CN=Easyteam,OU=EasyteamGroups,DC=easyteam,DC=fr
    			names[i] = name;
    		}
     
    		return names;	
    	}
    Quelqu'un pour m'aider sur mon problème de Ljava.lang.String;@439708

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par dos757 Voir le message
    Quelqu'un pour m'aider sur mon problème de Ljava.lang.String;@439708
    Comme tu l'as confirmé toi-même : tu essaies d'afficher un tableau de String au lieu d'un String (j'imagine que tu exécutes un println(names) ? tu n'as toujours pas donné l'instruction posant problème...).

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Merci pour le renseignement !

    Je possède 2 classes
    - AnnuaireData: contient les attributs ldap et leur Getters et Setters
    - LdapDAO: contient les méthodes qui vont me permettre d'afficher les résultats.

    Dans AnnuaireData, je réalise le découpage de mes strings comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public String[] getGroupsNames() {
    		if (null == memberOf || memberOf.size() == 0) return null;
     
    		String[] names = new String[memberOf.size()];
    		for (int i=0; i<memberOf.size(); i++ ) {
    			String name = memberOf.get(i).substring(3,memberOf.get(i).indexOf(","));
    			names[i] = name;
    		}
     
    		return names;	
    	}
    Dans LdapDAO, je réalise ma recherche d'utilisateurs

    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
     
    			for (int i=0; i<OU_to_search.length; i++) {
    				if (logger.isDebugEnabled()) logger.debug("searching users in "+ou_dn[i]+","+base_DN);
    				NamingEnumeration<SearchResult> srchResponse = ldapContext.search(ou_dn[i]+","+base_DN, searchFilter, srchControls);			  
     
    				int count=0;
     
     
     
    				while (srchResponse.hasMoreElements()) {
    					SearchResult result = srchResponse.next();
    					Attributes att = ldapContext.getAttributes(result.getName()+ ","+ou_dn[i]+","+base_DN);
     
    					// Initialize a person				
    					AnnuaireData p = new AnnuaireData();
    					p.setFirstname(getAttributeValue(att,"givenName"));			p.setLastname(getAttributeValue(att,"sn"));				p.setCn(getAttributeValue(att,"cn"));					p.setDisplayName(getAttributeValue(att,"displayName"));
     
     
    					Attribute a = att.get("memberOf");
    					if (null != a && a.size() > 0) {
    						List<String> groupes = new ArrayList<String>();
     
    //						System.out.println(p.getFirstname()+" "+p.getLastname()+", size()"+a.size());
    						for (int j=0; j<a.size(); j++) {
    							groupes.add(a.get(j).toString());
    //							System.out.println("groupe "+j+" : "+a.get(j));
    						}
    						p.setMemberOf(groupes);
    					}
     
    					persons.add(p);
    					count++;
    				}
    				if (logger.isDebugEnabled()) logger.debug(count+" user(s) found !");
     
    			}
    J'ai rajouté plus de précisions
    Merci d'avance !

Discussions similaires

  1. Bash - Découper une chaine de caractères
    Par nicolas.pissard dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 16/12/2014, 13h18
  2. Découper une chaine de caractères
    Par momomafioso dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/06/2007, 11h11
  3. [SQ2K] Découper une chaine de caractères
    Par maitrebn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2007, 19h22
  4. Réponses: 6
    Dernier message: 15/04/2007, 13h06
  5. [VBA] Découper une chaine de caractères
    Par rantanplan81 dans le forum VBA Access
    Réponses: 3
    Dernier message: 12/04/2007, 15h26

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