Je lis des lignes d'un fichier, et je crois qu'une fois que j'ai lu toutes les lignes, je reçois une exception à cause de ma condition de boucle while.Comment BufferedReader suit-il la ligne lue?
Exception in thread "main" java.lang.NullPointerException
at liarliar.main(liarliar.java:79)
... le code ...
// read the first line of the file
iNumMembers = Integer.parseInt(br.readLine().trim());
// read file
while ((sLine = br.readLine().trim()) != null) {
// extract the name and value 'm'
String[] split = sLine.split("\\s+");
sAccuser = split[0];
iM = Integer.parseInt(split[1]);
saTheAccused = new String[iM];
for (int i = 0; i < iM; i++) {
saTheAccused[i] = br.readLine().trim();
}
// create member
// initialize name and number of members being accused
Member member = new Member();
member.setName(sAccuser);
member.setM(iM);
member.setAccused(saTheAccused);
veteranMembers.add(member);
}
La boucle à l'intérieur devra lire plusieurs lignes si la dernière ligne du fichier est lu, le tout va essayer de readLine()
et cela échouera parce que le fichier entier a été lu. Alors comment fonctionne le BufferedReader readLine()
et comment puis-je sortir en toute sécurité de ma boucle while?
Merci.
En fait, je viens de réaliser que j'utilise l'expression rationnelle pour ignorer les espaces ... donc la garniture() est juste inutile? – Hristo
Non, si l'entrée a des espaces vides, le tableau des résultats contiendra une chaîne vide comme premier élément (index [0]). Si vous ne voulez pas ce comportement, vous devez toujours couper(). Si cela semble illogique, considérez ce que vous voudriez si le délimiteur était une virgule et que vous partagiez la chaîne ", a, b, c". Dans ce cas, vous voudrez probablement savoir que le premier "champ" était vide. –
Vous avez raison ... Je veux couper. Merci! – Hristo