При использовании in.hasNextInt (), как пропустить строку, которая следует в той же строке? - PullRequest
0 голосов
/ 15 марта 2019

После продолжительных поисков мне не удалось найти похожий вопрос / решение.Ниже то, что я написал, затем ввод и неудачный вывод.Из-за того, что он сохраняет первое значение для создания массива [13], но мой массив заканчивается пустым, я подозреваю, что комментарий в первой строке вызывает проблемы.Я должен отметить, что я не смог найти способ реализовать методы .split / .replace, так как я работаю со строками и строками и чувствую, что анализ будет беспорядком.Я уверен, что здесь есть обходной путь, который мне не хватает.

Итак,

TL; DR: Неспособность сохранить что-либо после '13' - Какпропустить или разрыв строки на «//» в первой строке входного файла после сохранения «13»?(Если это даже не так.)

Программа:

public class FileReader {

public static void main(String[] args) throws FileNotFoundException {
    String inf = JOptionPane.showInputDialog("Input file path?");
    java.io.FileReader inFile = new java.io.FileReader(inf);
    Scanner in = new Scanner(inFile);
    String outf = "./" + JOptionPane.showInputDialog("Name of new output file?");
    PrintWriter outFile = new PrintWriter(outf);
    int index = in.nextInt();
    int array[] = new int[index];
    MyArray MA1 = new MyArray();
    int i = 0;

    while (in.hasNextInt() && i < 13) {
        if (in.next().contains("//")){
            in.nextLine();
            continue;
        }
        System.out.println(in);
        array[i] = in.nextInt();
        i++;
    }
    System.out.println(Arrays.toString(array));
}}

Ввод:

https://textuploader.com/15h1x

Выход:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Ожидаемое:

[573, 2739, 76321, 3873, 73430, 333, 7293, 38383, 272, 946,3832, 8410, 2583]

Спасибо за любую помощь

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Просто используйте nextLine() каждый раз, а затем делайте то, что вам нужно:

while (in.hasNextLine() && i < 13) {
    line = in.nextLine();
    intval = line.split("\\s+")[0];    // check for lines with comment
    array[i] = Integer.parseInt(intval);
    i++;
}

Чтобы прочитать целые числа после 14-го значения:

List<Integer> remainingInts = new ArrayList<>();
while (in.hasNextLine()) {
    line = in.nextLine();
    intval = line.split("\\s+")[0];    // check for lines with comment
    remainingInts.add(Integer.parseInt(intVal));
}
0 голосов
/ 15 марта 2019

Ваш код не работал, потому что ваш цикл в то время как никогда не выполнялся, поскольку каждая строка файла загружалась как String , а не int ,Это также объясняет, почему ваш массив содержал только нули.


Измените цикл while на следующее:

int array[] = new int[13];
int i = 0;
in.nextLine(); // skip the first line

while (in.hasNextLine() && i < 13) {
    String currLine = in.nextLine();
    array[i] = Integer.parseInt(currLine.split("\\s+")[0]);
    i++;
}
System.out.println(Arrays.toString(array));

Это выводит:

[573, 2739, 76321, 3873, 73430, 333, 7293, 38383, 272, 946, 3832, 8410, 2583]


Если вы на Java-8 и выше,Вся операция может быть выполнена в одну строку

int[] array = Files.lines(Paths.get(inFile))
                   .mapToInt(line -> Integer.parseInt(line.split("\\s+")[0]))
                   .skip(1)          // skip first element
                   .limit(13)        // upto 13 only
                   .toArray();       // convert to array
...