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 :

Ajout d'une nouvelle ligne à un String


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Points : 36
    Points
    36
    Par défaut Ajout d'une nouvelle ligne à un String
    Bonsoir à tous,
    SVP est-ce-que possible sous Java d'ajouter une nouvelle ligne(String) à une position précise à un String (contenant plusieurs lignes )
    j'ai cherché sur le forum et sur le net mais j'ai pas trouvé de réponse à ma question
    BN et merci à tous

  2. #2
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Salut,


    Mieux vaut travailler avec les StringBuffer.
    De manière générale un StringBuffer peut être utilisé partout où un String est utilisé. Il est simplement plus flexible : on peut modifier son contenu.

    Pour insérer une chaine dans une autre, tu auras la méthode insert:

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    StringBuffer stbuf = new StringBuffer();
        stbuf.append("Cours");
        stbuf.append(" ");
        stbuf.append("de ");
        stbuf.append("Java .");
        stbuf.insert(9, "HTML et ");
    Un StringBuffer évolue dynamiquement. Si on augmente la longueur de son
    contenu, l'espace mémoire alloué est automatiquement augmenté.

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par slim_java Voir le message
    Mieux vaut travailler avec les StringBuffer.
    Faut éviter de dire des bétises

    1) StringBuffer et à éviter dans la pluspart des cas. Il est remplacé par StringBuilder qui n'est pas synchronisé donc plus performant
    2) StringBuffer/StringBuilder occupe plus de mémoire qu'une String
    3) StringBuffer/StringBuilder est mutable, ce qui le rend inutilisable dans la pluspart des cas où on utilise des String (clé de map, ajout dans des sets, listes triées, etc)
    Ces classes sont en fait destinée à construire des string complexe en plusieurs étapes. Elle ne doivent donc, a priori, que servir de support temporaire à cette construction.

    Si vous avez un String S et que vous voulez ajouter x au Nième caractère, il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    s = s.subString(0,n)+x+s.subString(n);
    Bien sur, si vous avez plusieurs fois l'opération à faire (dans une boucle par exemple), alors l'utilisation d'un StringBuilder est recommandée. Mais pour un oneshot, pas la peine de s'emm.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    Bonsoir les amis,
    merci bien pour l'aide et surtout pour l'information mais je trouve que ni stringBuffer ni stringBuilder m'aide à résoudre mon problème car ce que je cherche c'est d'ajouter un string à une ligne précise non à une position d'index précis par exemple si je veux ajouter le string "Hello" à la 2eme ligne du string chaine contenant : Salut
    Hi

    donc chaine contiena : Salut
    [COLOR="rgb(46, 139, 87)"]Hello[/COLOR]
    Hi

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    Excusez moi, je vais bien définir mon probleme
    en faite j'ai crée un fichier file rempli, ce que je veux faire c'est de copier le contenu de ce dernier dans un String que je peux l'utiliser au besoin puisque le contenu de file change à chaque fois dépendamment du choix de l'index de la liste de mon comboBox.Le probleme c'est qu'à chaque fois le changement de mon file se base sur le contenu initial que je veux le mettre dans un string chaine. ce que je veux c'est ajouter des string à des lignes précises de chaine.

    Ou bien j'ai une autre solution mais je sais pas si celle ci est fiable ou non:
    1) ajouter le contenu initial de mon fichier file à chaine,
    2) ouvrir file en mode ecriture avec écrasement et lui ajoute chaine,
    3) ouvrir file en mode lecture pour lire les lignes avant la position dont je veux ajouter mon nouveau texte(mettre le contenu dans un autre String chaine2 contenant les lignes lues et celles que je veux ajouter)
    4) re-ouvrir mon file en mode écriture pour lui ajouter [COLOR="rgb(255, 0, 255)"]chaine2[/COLOR]

    Je sais pas si c'est une bonne solution ou non, si non SVP n'hésiter pas à me donner vos idées
    Merci à tous

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 155
    Points : 199
    Points
    199
    Par défaut
    si tu veut ajouter à une ligne précise, il faut connaitre leurs indices.
    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
     
    String chaine="ligne0\nligne1\nligne2";
    //on veut la deuxieme ligne, donc la ligne numero 1 (après la ligne 0)
    int numeroLigne = 0;
    int debutLigne= -1;
    int finLigne= -1;
    int indice=0;
    ///cas particulier
    if(numeroLigne == 0){
    	debutLigne = 0;
    }
    while(chaine.length() > indice && numeroLigne >=0){
    	if(chaine.charAt(indice)=='\n'){
    		numeroLigne--;
    		if(numeroLigne == 0){
    			debutLigne = indice + 1;
    		}
    		if(numeroLigne == -1){
    			finLigne = indice - 1;
    		}
    	}
    	//relance
    	indice++;
    }
    //si le fichier contient notre ligne mais ne la finit pas
    if(debutLigne != -1){
    	if(finLigne == -1){
    		finLigne = indice-1;
    	}
    }
    System.out.println("ligne (indice:"+debutLigne+"->"+finLigne+")");
    System.out.println("\""+chaine.substring(debutLigne, finLigne+1)+"\"");
    Puis tu utilise les méthodes d'insertions.
    A noter que l'utilisation du split("\n") est plus simple.

    Atention, windows fait terminer les lignes non pas par "\n" mais par "\r\n".
    Tu peux alors utiliser des Pattern et 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Pattern pattern = Pattern.compile("\r\n");
    String chaine="ligne0\r\nligne1\r\nligne2";
    //on veut la deuxieme ligne, donc la ligne numero 1 (après la ligne 0)
    int numeroLigne = 0;
    int debutLigne= -1;
    int finLigne= -1;
    //		int indice=0;
    Matcher matcher = pattern.matcher(chaine);
    ///cas particulier
    if(numeroLigne == 0){
    	debutLigne = 0;
    }
    while(matcher.find()){
    	numeroLigne--;
    	if(numeroLigne == 0){
    		debutLigne = matcher.end();
    	}
    	if(numeroLigne == -1){
    		finLigne = matcher.start()-1;
    	}
    }
    //si le fichier contient notre ligne mais ne la finit pas
    if(debutLigne != -1){
    	if(finLigne == -1){
    		finLigne = chaine.length()-1;
    	}
    }
    System.out.println("ligne numero (indice:"+debutLigne+"->"+finLigne+")");
    System.out.println("\""+chaine.substring(debutLigne, finLigne+1)+"\"");

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    Bonjour merill,
    merci pour votre aide mais la solution que vous m'avez donné ne me permettra que d'ajouter un String just aprés Ligne0, si je veux ajouter une nouvelle ligne just aprés Ligne1 donc comment puis-je faire pour trouver l'indice de fin de Ligne1??

    SVP j'ai besoin de votre aide
    merci à tous

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    tu compte les retour à la ligne jusqu'à arriver au compte qui t'intéresse. Et là tu insère.

  9. #9
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Je pense que là vous êtes bien parti sur du délire . Faut pas réinventer la roue les gars. Pourquoi ne pas simplement utiliser un ArrayList<String>, cette classe te fournit tous les outils pour modifier, insérer, supprimer à la ligne que tu veux, et quand t'as fini toutes tes operations tu flushes le contenu de ton arrayList dans un fichier avec une simple boucle et tu liberes cette array.Je trouve bien plus simple à coder et moins crade les gars.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    merci bien les amis,
    j'ai trouvé que la meilleure solution est d'utiliser du split("\n"), qui récupére toutes les lignes d'une chaine et les mettre dans un tableau de string.

    EXP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String[] tabChaine=test.chaine.split("\n");
    Vector v=new Vector();
    String contVect="";
      for(int i=0;i<tabChaine.length;i++){
          v.add(i,tabChaine[i]);
          System.out.println("Ligne n° "+i+"  :"+v.get(i));
           }
      System.out.println("\n");
      v.add(2, "Mytest");     // Ajouter la ligne désirée à la position désirée

  11. #11
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Salut,

    Il vaut mieux utiliser un ArrayList qu'un Vector dans ce cadre d'utilisation (pas besoin de synchronisation). C'est plus rapide et ca s'utilise quasiment pareil.

    a+

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Points : 426
    Points
    426
    Par défaut
    Moi j'utiliserai System.getProperty("line.separator") plutôt que "\n". On fait du java, pas du ksh

  13. #13
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 564
    Points : 21 629
    Points
    21 629
    Par défaut
    System.getProperty("line.separator")
    Ces histoires de "conventions de fin de ligne dépendant de l'environnement" sont obsolètes.

    Certains formats (de fichier, de protocole réseau texte, etc,) utilisent la convention '\n', d'autres la convention '\r\n', d'autres plus rares '\r', un bon paquet acceptent n'importe lequel mais demandent que ça se configure, et les plus modernes les acceptent tous les trois et les traitent pareil, même mélangés dans la même entité.

    Cela n'a plus rien à voir avec la plate-forme en cours. Ce qu'il faut c'est utiliser le bon, pas utiliser celui de la plate-forme. line.separator est une relique à n'utiliser que pour ce qui a bel et bien à voir (genre quand on compte explicitement sur le Notepad sous Windows.)

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

Discussions similaires

  1. Script non fonctionnel à l'ajout d'une nouvelle ligne
    Par Eric5031 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/03/2015, 17h00
  2. Ajout d'une nouvelle ligne
    Par Redg9 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 23/01/2009, 14h51
  3. Ajouter une nouvelle ligne sous la cellule actuellement sélectionnée
    Par agronomia dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/02/2008, 09h50
  4. message "Vous allez ajouter une nouvelle ligne"
    Par Rizel dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/09/2007, 14h10
  5. Réponses: 7
    Dernier message: 11/06/2007, 20h39

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