Метод nextLine () Java-сканера не выдает строку - PullRequest
0 голосов
/ 27 сентября 2019

Я потратил впустую часы из-за этой простой проблемы, но я не мог понять, почему nextLine () не может найти следующую строку.Пожалуйста, помогите мне, спасибо!

Я пробовал этот код: https://www.geeksforgeeks.org/scanner-nextline-method-in-java-with-examples/ в качестве эксперимента и, естественно, он работал, но у меня не получится.

Переменная "test" скопирована сфайл.

Часть кода:

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);
    }

Массив "временный" должен содержать первую строку файла, по меньшей мере, в первом цикле и во время выполненияошибка не должна появляться.

1 Ответ

3 голосов
/ 27 сентября 2019

Вы исчерпали Scanner в этой строке:

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

Останавливается, потому что больше нет линий.(Обратите внимание, что проверка hasNext() сопряжена с вызовом next(), а hasNextLine() сопряжена с nextLine()).

Итак, если вы попытаетесь прочитать еще какие-нибудь строки из Scanner,читать больше нечего.

Вам либо нужно создать новый экземпляр Scanner;или используйте структуру данных, для которой вам не нужно знать размер a-priori, например List (или измените размер массива по мере необходимости; но нет смысла делать это «вручную», когда ArrayList делаетчто для вас прозрачно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...