Quelle est la meilleure façon de parcourir les lignes de Java String?
Actuellement, je suis en utilisant quelque chose comme :
String[]lines = textContent.split(System.getProperty("line.separator"));
for(String tmpLine : lines){
//do something
}
Je ne suis pas très content de cette méthode, car il créer un lourd tableau (disons textContent
peut contenir un livre).
Est-il une meilleure solution pour itérer sur les lignes d'une String
?
- Aussi maintenant avec JDK/11, on peut utiliser
String.lines
, qui fournit de meilleures performances que de le découper.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser :
Et l'utilisation de la
readLine()
méthode :BufferedReader
etStringReader
sont plus légers que d'un tableau de Chaîne?Pour ajouter le Java 8 chemin à cette question:
De malédiction vous pouvez également utiliser
System.lineSeparator()
à split si vous êtes sûr que le fichier est produit par les mêmes plattform que la machine virtuelle s'exécute sur l'.Ou encore mieux utiliser le flux d'api encore plus agressiv avec filtre, d'une carte et de recueillir:
System.lineSeparator()
au lieu de la propriété directementcontent
dans le deuxième exemple.Vous pourriez utiliser des chaînes de caractères.indexOf()/Chaîne.substring()
Goyave est Splitter fonctionne bien. Surtout que vous pouvez supprimer des lignes vides
Splitter.on(Pattern.compile("\r?\n")).split(entireFile)
Splitter#on
: google.github.io/goyave/releases/snapshot/api/docs/com/google/...Scanner
Ce sujet de la
java.util.Scanner
classe ajoutée dans Java 1.5?En résumé:
et de la note de votre scénario:
Vous pouvez réellement se quereller
Scanner
pour vous permettre d'utiliser une normalefor
boucle:nous donne:
utilisation BufferedReader avec StringReader argument. BufferedReader a une méthode readLine() de sorte que vous pouvez lire votre texte ligne par ligne.
line
variable) au lieu de toutes les lignes.Combiner
java.io.StringReader
etjava.io.LineNumberReader
BufferedReader
. Qu'est-ce que les avantages dejava.io.LineNumberReader
?Je crois que vous avez une meilleure API disponibles avec JDK/11 où vous pouvez faire de même en utilisant le
String.lines()
API qui retourne le flux des chaînes extraites de cette chaîne partitionné en ligne terminateurs.L'utilisation de la même chose pourrait être :-
Important API Note :-