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 :

Conserver le motif utiliser dans split()?


Sujet :

Langage Java

  1. #1
    Membre habitué Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Points : 161
    Points
    161
    Par défaut Conserver le motif utiliser dans split()?
    Bonjour, j'aimerais savoir s'il est possible de conserver le motif utilisé avec la méthode split pour découper une phrase.

    Par exemple avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String phrase = "Le petit chat."
    String[] phrase_decoupée = phrase.split("petit");
    //phrase_decoupée[0] contient "Le " et phrase_decoupée[1] contient " chat."
    Serait-il possible d'avoir qqch du genre phrase_decoupée[0] = "Le " puis phrase_decoupée[1] = "petit" (le motif de découpage) et phrase_decoupée[2] = " chat".

    Merci

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    oui c'est possible, mais en utilisant des expressions régulières au lieu d'un split:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    String phrase = "mon petit chat";
    Pattern p = Pattern.compile("^(.+)(petit)(.+)$");
    Matcher m = p.matcher(phrase);
     
    if(m.matches()) {
       System.out.println(m.group(1)); // "mon "
       System.out.println(m.group(2)); // "petit"
       System.out.println(m.group(3)); // " chat"
    }
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 159
    Points : 467
    Points
    467
    Par défaut
    Au lieu de faire le split avec "petit", tu le fais avec un ou plusieurs espaces:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String[] phrase_decoupee = phrase.split(" +");

  4. #4
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    A mon avis non, rien de tel de base. Il ne te reste plus qu'à reparcourir le tableau par la suite pour créer un second tableau avec tes séparateurs (ici "petit") entre tes mots ...

    Edit : le split avec " +" ne répond pas à la question à mon sens car spécifique à l'exemple donné
    L'expression régulière non plus car elle demanderait de savoir à l'avance combien on a de "petit" dans la chaîne ...

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu peux également implémenter ton propre split() qui ajouterait les séparateur au résultat. Par exemple :
    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
    	public static String[] split(String input, String regex, boolean includeSeparator) {
    		// On créer le matcher qui recherchera toutes les séparations :
    		Matcher m = Pattern.compile(regex).matcher(input);
     
    		// Liste des 'mots' a retourner :
    		List<String> matchList = new ArrayList<String>();
    		// Index de départ des mots à découper :
    		int index = 0;
     
    		// On recherche chaque séparateur :
    		while(m.find()) {
    			// On découpe la chaine trouvé avant le séparateur :
    			matchList.add( input.substring(index, m.start()) );
     
    			if (includeSeparator) {
    				// On retourne le séparateur :
    				matchList.add( m.group() );
    			}
     
    			// On déplace l'index après le séparateur
    			index = m.end();
    		}
     
    		if (index==0) {
    			// Cas particulier : aucun séparateur trouvé,
    			// on retourne la chaine en entier :
    			return new String[] {input};
    		}
     
    		if (index < input.length()) {
    			// On rajoute la fin de la chaine (dernier mot)
    			matchList.add( input.substring(index) );
    		}
    		return matchList.toArray(new String[matchList.size()]);
    	}
    Utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	String phrase = "Le petit chat. est pitit";
    	String[] phrase_decoupée = split(phrase, "petit", true);
    a++

  6. #6
    Membre habitué Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Points : 161
    Points
    161
    Par défaut
    Merci à tous pour vos réponses et surtout à toi AdiGuba, je vais essayer ce que tu me proposes.
    Je vous tiens au courant.


    A+

    EDIT

    Eclipse me renvoit l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    	List cannot be resolved to a type
    	Syntax error, parameterized types are only available if source level is 5.0
    	ArrayList cannot be resolved to a type
    	Syntax error, parameterized types are only available if source level is 5.0
    concernant cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<String> matchList = new ArrayList<String>();
    Eclipse refuse de compiler.

  7. #7
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Le code d'adiGuba utilise les types paramétrés, disponibles uniquement à partir de Java 5 ou plus. Ton Eclipse doit être configuré pour compiler avec l'option de compilation "-source 1.4" ou moins, donc ca ne fonctionne pas.

    Vérifies tes paramètres de compilation

    Fred
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  8. #8
    Membre habitué Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Points : 161
    Points
    161
    Par défaut
    En effet le compilo était configurer sur 1.4, j'ai été dans Project -> Properties -> java compiler et j'ai mis 6.0 mais ça ne change rien, toujours le m^me message d'erreur.

  9. #9
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Normalement, sous Eclipse, quand tu as ce message d'erreur, il suffit d'aller à gauche sur la petite croix de l'erreur. Parmis les solutions de résolution de l'erreur, il propose si tout va bien "Change source level to ..."

    C'est cette solution qu'il faut retenir.

    Sinon, l'autre solution consiste à rendre le code compatible java 1.4 (ce qui revient simplement à supprimer les "<String>")
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  10. #10
    Membre habitué Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Points : 161
    Points
    161
    Par défaut
    Merci, ça marche.

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

Discussions similaires

  1. Récupérer variables d'1 <form> et les utiliser dans X
    Par honeyz dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 20/04/2006, 11h39
  2. VCL de Crystal Report pour utilisation dans C++Builder
    Par dibak dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/02/2004, 17h04
  3. caractère générique utilisable dans strcmp
    Par barthelv dans le forum C
    Réponses: 9
    Dernier message: 01/08/2003, 16h54
  4. Réponses: 7
    Dernier message: 26/06/2003, 09h11
  5. [langage] expression reguliere motif répétitif dans 1 pattern
    Par comme de bien entendu dans le forum Langage
    Réponses: 11
    Dernier message: 09/04/2003, 16h14

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