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."
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());
}
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());
}
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.
Utilisez ("\ n") ;, lorsque vous ajoutez au constructeur de chaînes . C’est un moyen simple de le faire.
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
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.