Ввести число с запятыми

В файле записаны числа, означающие население мира в какой-то год. Например 2,557,628,654 - 2 миллиарда 555 миллионов... Как и прочитать как целое?

int pop = scanner.nextInt();

Выдает исключение. Регулярное выражение?


Ответы (3 шт):

Автор решения: Miron

Во-первых: диапазон значений int в java - от -2 147 483 648 до 2 147 483 647.
Во-вторых: вам нужно сначала прочитать строчку, убрать из нее все , и только потом переводить в long.

→ Ссылка
Автор решения: gil9red

Считайте как строку и преобразуйте ее в число.

В файле num.txt

2,557,628,654

Пример:

File file = new File("num.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
    String line = scanner.next();
    long num = Long.parseLong(line.replace(",", ""));
    System.out.println(line + " -> " + num);
    // 2,557,628,654 -> 2557628654
}

UDP.

По подсказке HasmikGaryaka, можно через Scanner.useLocale указать локаль, что определит разделитель между группами цифр целого числа. В Locale.ENGLISH это будет символ запятой (,). Подробнее про локализованные строки: https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#localized-numbers, а про разделитель групп можно посмотреть в ссылке LocalGroupSeparator

Пример:

    scanner.useLocale(Locale.ENGLISH);
    long num = scanner.nextLong();
    System.out.println(num);
    // 2557628654
→ Ссылка
Автор решения: HasmikGaryaka

Возложить работу на сканер.

scanner.useLocale(Locale.ENGLISH);
String str = scanner.nextLine();
int year = scanner.nextInt();
long pop = scanner.nextLong();
→ Ссылка