Ввести число с запятыми
В файле записаны числа, означающие население мира в какой-то год. Например 2,557,628,654 - 2 миллиарда 555 миллионов... Как и прочитать как целое?
int pop = scanner.nextInt();
Выдает исключение. Регулярное выражение?
Ответы (3 шт):
Во-первых: диапазон значений int в java - от -2 147 483 648 до 2 147 483 647.
Во-вторых: вам нужно сначала прочитать строчку, убрать из нее все , и только потом переводить в long.
Считайте как строку и преобразуйте ее в число.
В файле 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
Возложить работу на сканер.
scanner.useLocale(Locale.ENGLISH);
String str = scanner.nextLine();
int year = scanner.nextInt();
long pop = scanner.nextLong();