Преобразование чисел из строкового формата в целочисленный (Java) - PullRequest
1 голос
/ 07 мая 2020

У меня небольшая проблема:

import java.io.*;

public class Ninteri {

    public static void main(String[] args) throws IOException {

        FileReader f = new FileReader("/Users/MyUser/Desktop/reader.txt");

        BufferedReader b = new BufferedReader(f);

        String s;
        int x;

        while (true) {
            s = b.readLine();
            if (s == null) {
                break;
            }

            x = Integer.parseInt(s);
            System.out.println(x);
        }
    }

}

Исключение:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1 2 3 4 5 6 7 8 "
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at stream.Ninteri.main(Ninteri.java:22)

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Из ошибки видно, что первая строка в вашем файле - 1 2 3 4 5 6 7 8, которая сама по себе не является числовой строкой; скорее, строка, содержащая числовые строки. Сначала вам нужно разделить эту строку на массив числовых строк, а затем вам нужно выполнить итерацию по массиву и проанализировать каждый элемент в массиве на int.

while (true) {
    s = b.readLine();
    if (s == null) {
        break;
    }
    String[] arr = s.split("\\s+");// Split the line on space(s)
    for (String num : arr) {
        x = Integer.parseInt(num);
        System.out.println(x);
    }
}
0 голосов
/ 07 мая 2020

1 2 3 4 5 6 7 8 не является одним числом, поэтому оно не может быть представлено целым числом.

Используйте блок for в массиве строк, полученном в результате разделения, для преобразования каждого из них по отдельности.

for(String a: s.split("\\s")) {
    int x = Integer.parseInt(a);
    System.out.println(x);
}
...