web-dev-qa-db-fra.com

Comment lire chaîne Builder ligne par ligne

Puis-je lire String Builder ligne par ligne? Et obtenez la longueur de chaque ligne aussi.


MODIFIER:

"Je crée une chaîne dans StringBuilder et j'ajoute"\n "à l'intérieur. Et j'ai besoin de la relire. Je dois considérer que chaque"\n "a une nouvelle ligne."

14
Ran Gualberto

Compte tenu de votre modification, il suffit d'appeler toString() sur l'instance StringBuilder, puis d'appeler split("\\n") sur l'instance String renvoyée. Et à partir de là, vous aurez un tableau String que vous pouvez parcourir pour accéder à chaque "ligne" de l'instance StringBuilder. Et bien sûr, appelez length() sur chaque instance String ou "ligne" pour obtenir sa longueur.


StringBuilder sb = new StringBuilder();
sb.append("line 1");
sb.append("\\n");
sb.append("line 2");

String[] lines = sb.toString().split("\\n");
for(String s: lines){
    System.out.println("Content = " + s);
    System.out.println("Length = " + s.length());
}
23
mre

Créez un objet Scanner et vous pourrez facilement analyser une ligne et obtenir la longueur.

Scanner scan = new Scanner(sb.toString()); // I have named your StringBuilder object sb
while (scan.hasNextLine() ){
 String oneLine = scan.nextLine();
 System.out.println(oneLine.length());
}
12
Farmor

Vous ne savez pas trop ce que vous essayez de faire, mais vous pouvez appeler toString().split() pour obtenir un tableau. Vous pouvez diviser des délimiteurs de ligne.

0
JRL

Utilisez ("\ n") ;, lorsque vous ajoutez au constructeur de chaînes . C’est un moyen simple de le faire.

0
Andy

Comme déjà répondu, dans le cas simple, vous pouvez simplement utiliser toString().split(). Si vous voulez quelque chose d'un peu plus flexible et qui supporte également la suppression de ligne, il est assez simple de parcourir les lignes en gardant simplement trace des valeurs de début et de fin de la dernière ligne que vous avez renvoyée:

    new Iterator<String>() {
      boolean hasNext = true;
      boolean removed = false;
      int start = 0;
      int end = -1;
      @Override public boolean hasNext() {
        return hasNext;
      }

      @Override public String next() {
        removed = false;
        if (!hasNext) {
          throw new NoSuchElementException();
        }
        start = end + 1;
        end = value.indexOf("\n", start);
        if (end == -1) {
          hasNext = false;
        }
        return value.substring(
            start,
            end == -1 ? value.length() : end);
      }

      @Override public void remove() {
        if (removed) {
          throw new IllegalStateException("Multiple calls to remove() without and intervening call to next().");
        }
        value.delete(
            start,
            end == -1 ? value.length() : end + 1);
        end = start - 1;
        removed = true;
      }
    };

Vous pouvez le voir dans une classe d’utilitaire qui retourne un LineIterator pour String ou StringBuilder ici: http://Pastebin.com/JA6abTg3

Et il a des tests qui montrent comment il peut être utilisé ici: http://Pastebin.com/X1b5cGX8

0
Rich

Je pense qu’il n’existe pas de méthode permettant de lire ligne par ligne le constructeur de chaînes . Mais si vous souhaitez séparer chaîne par ligne, vous pouvez ajouter le caractère de nouvelle ligne ""\n "" lorsque vous ajoutez une chaîne dans StringBuilder.

0
Yagnesh Agola