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 :

Question sur String[] split() [FAQ]


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 30
    Par défaut Question sur String[] split()
    Bonsoir, j'ai une question toute bête et qui me bloque vraiment ...
    est ce qu'il est possible de faire un split() d'une string avec comme
    séparateur "\" ? (j'ai essayé "\\" mais il ne marche pas).
    Cela doit me permettre de spliter un chemin de dossier ...
    Car ce que je veux c'est à partir d'un dossier (que je sélectionne) C:\doc\doss, de ne récupérer que doss\... et ce qui suit ! je voulais faire un split pour récupérer "doss" et en faire ce que je veux, mais je n'arrive pas !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 121
    Par défaut
    En java il faut écrire "\\" pour représenter \
    D'autre part l'expression régulière c'est \\
    Et donc \\ sous forme de String java : "\\\\"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String table[]="eae\\eaezae\\ezaea".split("\\\\");
    for (String string:table) {
    	System.out.println(string);
    }

    Attention à la portabilité !!! Bien lire la doc. concernant les fichiers et les séparateurs de fichiers en JAVA
    Un site coloré...
    http://manu.e3b.org/Java/Tutoriels/T...nFichiers.html

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2009
    Messages : 88
    Par défaut
    Salut, même question que k3nsou dessus sauf que je doit split() une chaîne de type :

    ,\virgule
    .\point
    :\deux-point
    etc..., ce sont des valeurs que je récupère d'un fichier XML que je n'ai pas le droit de modifier...

    Donc je ne peux pas remplacer tous les "\" par des "\\" ...

    Je voudrais split() la chaîne afin de ne récupérer que ce qui se trouve à gauche de l'antislash. (",", ".", ":"...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String special = e.getTextContent().split( "\\" )[ 0 ];
    m'affiche :
    java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
    \
    ^
    at java.util.regex.Pattern.error(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.<init>(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.lang.String.split(Unknown Source)
    at java.lang.String.split(Unknown Source)
    at Enrichissement.remplissageTextArea(Enrichissement.java:557)
    at Enrichissement.<init>(Enrichissement.java:61)
    at EnrichissementApplet.start(EnrichissementApplet.java:21)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    Exception : java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
    \
    ^
    Une idée ?
    Merci.
    Bastien

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2009
    Messages : 88
    Par défaut
    Bah en fait la réponse de rebel64 m'a suffit.

    J'ai tout simplement transformer le "\" en "\\" avant de faire le split en passant par une variable tampon. Pas très pratique quand même :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String ooo = e.getTextContent( ); 
    ooo.replace("\\","\\\\");
    String special = ooo.split( "\\\\" )[ 0 ];

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Citation Envoyé par doobinay Voir le message
    J'ai tout simplement transformer le "\" en "\\" avant de faire le split en passant par une variable tampon. Pas très pratique quand même :p
    Tu n'as pas besoin de faire ça... et d'ailleurs tu ne le fais pas vraiment dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String ooo = e.getTextContent( ); 
    ooo.replace("\\","\\\\"); // cette ligne est complètement inutile ; elle ne fait rien
    String special = ooo.split( "\\\\" )[ 0 ];
    Pourquoi je dis que ton replace ne sert à rien :
    Les objets String ne peuvent pas être modifiés. L'instruction ooo.replace("\\", "\\\\") te renvoie une nouvelle chaîne de caractères (qui correspond à la chaîne ooo dans laquelle les "\" ont été remplacés par des "\\"), mais ne modifie pas ooo.
    Donc, étant donné que tu ne récupères pas le résultat de l'instruction, celle-ci ne sert à rien.

    Pourquoi il fallait quand même effectuer un split("\\\\") :
    En Java, "\" est un caractère spécial qui peut être utilisé en combinaison avec un autre caractère : "\n" représente un saut de ligne. Il faut taper dans le code "\\" pour représenter "\".
    Dans les expressions régulières, "\" est un caractère spécial qui peut être utilisé en combinaison avec un autre caractère : "\d" représente un chiffre. Il faut utiliser l'expression "\\" pour matcher le caractère "\".
    Donc, pour matcher le caractère "\", il faut que ton expression régulière vaille "\\", et donc dans le code Java il faut taper "\\\\".
    C'était pourtant déjà expliqué plus haut...

    Conclusion : tu peux effectuer directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String special = e.getTextContent().split("\\\\")[0];

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2009
    Messages : 88
    Par défaut
    Effectivement, j'avais pas bien saisi ce point !

    Je te remercie pour l'éclaircissement !
    Bastien.

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

Discussions similaires

  1. question sur String.Format()
    Par Rincevent76 dans le forum Langage
    Réponses: 10
    Dernier message: 26/07/2010, 11h32
  2. Question sur String.replaceFirst()
    Par MrEddy dans le forum Langage
    Réponses: 2
    Dernier message: 30/07/2009, 12h06
  3. Quelques question sur string
    Par devatt dans le forum Débuter
    Réponses: 5
    Dernier message: 24/12/2008, 10h11
  4. Question sur le Split()
    Par chris81 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/12/2008, 18h02
  5. Question sur String variable = new String( )
    Par beegees dans le forum Langage
    Réponses: 12
    Dernier message: 14/05/2007, 21h38

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