J'ai perdu des heures avec ce problème simple, mais je ne pouvais pas comprendre pourquoi nextLine() ne pouvait pas trouver la ligne suivante. S'il vous plaît aidez-moi, merci!

J'ai essayé ce code : https://www.geeksforgeeks. org/scanner-nextline-method-in-java-with-examples/ comme une expérience et naturellement cela a fonctionné mais pas le mien.

La variable "test" est copiée à partir du fichier.

Partie de code :

ObservableList adatok;

@Override
public void initialize(URL url, ResourceBundle rb) {

    int lines = 0;
    try {
    File f = new File("C:\\Users\\EDU_BYQN_0965\\Documents\\NetBeansProjects\\JSZ_SB\\src\\jsz_sb\\fokonyvi_kivonat.txt");
    String test = "113,Vagyoni értékű jogok,3600,0,\n" +
            "1173,Vagyoni értékű jogok értékhelyesbítése,360,0,\n" +
            "1193,Vagyoni értékű jogok értékcsökkenése,0,2400,\n" +
            "5,t,5,5,";

    Scanner s = new Scanner(f);
    while (s.hasNext() && s.nextLine() != null) lines++;
    String[][] array = new String[lines][4];
    String[] temporary = new String[4];
    for (int i = 0; i < lines; i++) {
        temporary = s.nextLine().split(",");
        for (int j = 0; j < 4; j++) {
            array[i][j]=temporary[j];
            adatok = FXCollections.observableArrayList(
                    new TrialBalance(array[i][0], array[i][1], Integer.parseInt(array[i][2]), Integer.parseInt(array[i][3])));               
        }            
    }
            } catch (FileNotFoundException ex) {
        Logger.getLogger(FXML_scene2Controller.class.getName()).log(Level.SEVERE, null, ex);
    }

Le tableau "temporaire" doit contenir la première ligne du fichier, au moins à la première boucle et l'erreur d'exécution ne doit pas apparaître.

0
Balint9004 27 sept. 2019 à 16:48

1 réponse

Meilleure réponse

Vous épuisez le Scanner dans cette ligne :

while (s.hasNext() && s.nextLine() != null) lines++;

Il s'arrête car il n'y a plus de lignes. (Notez que le chèque hasNext() s'apparie avec un appel à next() et hasNextLine() s'apparie avec nextLine()).

Donc, si vous essayez de lire d'autres lignes du Scanner, il n'y a plus rien à lire.

Vous devez soit créer une nouvelle instance de Scanner ; ou utilisez une structure de données dont vous n'avez pas besoin de connaître la taille a priori, comme un List (ou redimensionnez votre tableau au besoin ; mais il n'y a pas grand intérêt à le faire "à la main" lorsque ArrayList le fait pour vous de manière transparente).

3
Andy Turner 28 sept. 2019 à 11:17