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 :

Remplacer les fins de ligne


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Points : 46
    Points
    46
    Par défaut Remplacer les fins de ligne
    Bonjour à tous !

    Dans le cadre d'un portail en J2EE, je dois réaliser un chat.
    Pour ce chat, les messages sont saisis par l'utilisateur dans un champt textarea, avec possibilité de rédiger sur plusieurs lignes.

    Avant d'insérer le message en base de données, je souhaiterais remplacer les caractères de fin de ligne. Afin de faire ceci, j'ai dans une classe utilitaire la méthode suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static String replaceLineFeeds(String aMessage) {
    	return aMessage.replaceAll("\n\r", "<br />");
    }
    Malheureusement, si le message traité contient un retour à la ligne, aucun match n'est trouvé. Par contre, quand je teste individuellement "\n" puis "\r", ces 2 patterns sont trouvés et chacun est remplacé par la balise "<br />". Je me retrouve donc avec 2 "<br />" au lieu d'un seul.

    Quelqu'un aurait une idée pour résoudre ce problème SVP ? Si vous avez également une meilleure solution, elle est la bienvenue

  2. #2
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    bonjour

    C'est peut être \r\n...

    bon courage

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Je viens de tester avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public static String replaceLineFeeds(String aMessage) {
    	aMessage = aMessage.replaceAll("\r\n", "<br />");
    	aMessage = aMessage.replaceAll("\n\r", "<br />");
     
    	return aMessage;
    }
    Toujours aucun remplacement ...

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Pourquoi pas utiliser un buffer, c'est certes plus complexe qu'un simple replaceAll, mais avec le buffer tu peux récupérer ton String correctement. Le problème est que aujourd'hui c'est peut-être "\n\r" mais demain cela peux entre "\r\n" et pourquoi pas dans l'avenir "\bidule\machin", au moins avec le buffer tu n'a plus ce problème. 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
     
    public static String replaceLineFeeds(String aMessage) {
            BufferedReader buffer = new BufferedReader(new StringReader(aMessage));
            StringBuffer result = new StringBuffer();
            String ligne = "";
            try {
                while ((ligne = buffer.readLine()) != null) {
                    result.append(ligne);
                    result.append("<BR>");
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    buffer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return result.toString();
        }

  5. #5
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    sinon ça ça marche peut-être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    aMessage = aMessage.replaceAll("\n","<br />");
    aMessage = aMessage.replaceAll("\r","");
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  6. #6
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    re,

    Ca ressemble plus a du bricolage...
    Surtout si il y a plus que les fins de lignes à transformer (caractères accentués...

    Ceci devrait normalement fonctionné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     aMessage = aMessage.replaceAll("\r\n", "<br />");
    Le mieux serait de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aMessage = aMessage.replaceAll("\r\n|\r|\n", "<br/");
    Le pb c'est qu'il va peut être faire passé le \r avant le \r\n

    Sinon fait des traces

    bon courage

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

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Points : 278
    Points
    278
    Par défaut
    Citation Envoyé par papyreno
    Par contre, quand je teste individuellement "\n" puis "\r", ces 2 patterns sont trouvés et chacun est remplacé par la balise "<br />". Je me retrouve donc avec 2 "<br />" au lieu d'un seul.
    sinon tu peux aussi remplacer les "\r" par une chaine vide "" et les "\n" par le "<br/>"

    comme ca terminer les double <br/>

  8. #8
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    inon tu peux aussi remplacer les "\r" par une chaine vide "" et les "\n" par le "<br/>"

    comme ca terminer les double <br/>
    aMessage = aMessage.replaceAll("\n","<br />");
    aMessage = aMessage.replaceAll("\r","");
    Perte de portabilité avec les caractères de fin de ligne MAC.

  9. #9
    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,

    Citation Envoyé par yann2
    Perte de portabilité avec les caractères de fin de ligne MAC.
    +1

    Pourquoi ne pas simplement utiliser le code de fin de ligne du système :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        public static String replaceLineFeeds(String aMessage) {
            return aMessage.replaceAll(System.getProperty("line.separator"), "<br />");
        }
    a++

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Merci à tous pour vos remarques et idées

    J'ai finalement choisi la solution proposée par rmartins, qui fonctionne !!!
    Le seul "soucis" étant que ça rajoute un <br /> à la fin du message, mais là je chipote Je vais bidouiller le code, pour résoudre ça mais ça ne devrait pas poser trop de problème...

    Encore merci à vous

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

Discussions similaires

  1. Afficher remplacer les fins de lignes CRLF par LF sous AIX
    Par doudou8mc dans le forum Shell et commandes POSIX
    Réponses: 20
    Dernier message: 16/06/2015, 16h40
  2. remplacer les retour de ligne par <br> dans une chaine?
    Par cortex024 dans le forum Langage
    Réponses: 2
    Dernier message: 03/12/2006, 17h22
  3. Remplacer les sauts de ligne
    Par Nicobp dans le forum Langage
    Réponses: 6
    Dernier message: 02/10/2006, 03h30
  4. Réponses: 4
    Dernier message: 28/09/2006, 11h02
  5. Réponses: 16
    Dernier message: 22/03/2006, 11h11

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