В System.in для Scanner ввожу данные через Enter: 1 2 3 a1 4. Хочу получить сумму чисел, т.е. 10. Слово "а1" нужно игнорировать. Как это сделать, к тому же без обработки исключений?
double sum = Stream.of(new Scanner(System.in).nextLine().split("\\s+")).filter(s -> {
try {
Double.parseDouble(s);
return true;
} catch (Exception e) {
return false;
}
}).mapToDouble(Double::valueOf).sum();
1) Считываем строчку new Scanner(System.in).nextLine()
;
2) Разделяем её по пробелам и превращаем в массив split("\\s+")
.
3) Создаём стрим Stream.of()
.
4) Отсеиваем строки, которые не представляют из себя числа filter()
.
5) Превращаем каждый элемент стрима в число и меняем тип стрима, чтобы можно было найти его сумму mapToDouble(Double::valueOf)
.
6) Получаем сумму всех элементов стрима sum()
.
Если уж вы хотите без исключений в методе filter()
, его можно записать так:
.filter(s -> s.matches("[-+]?\\d+(?:\\.\\d+)?(?:[eE][-+]?\\d+)?"))
Есть и другой вариант:
Pattern pattern = Pattern.compile("(?<!\\S)[-+]?\\d+(?:\\.\\d+)?(?:[eE][-+]?\\d+)?(?!\\S)");
Matcher matcher = pattern.matcher(new Scanner(System.in).nextLine());
double sum = 0;
while(matcher.find())
sum += Double.parseDouble(matcher.group());
Здесь с помощью регулярного выражения из строки ищутся числовые подстроки.
Хотя самым простым и быстрым вариантом будет такой:
double sum = 0;
for (String s : new Scanner(System.in).nextLine().split("\\s+"))
try {
sum += Double.parseDouble(s);
} catch (Exception ignored) {}
Но вы почему-то не хотите обрабатывать исключения, хотя в принципе они здесь и не обрабатываются, они игнорируются, но это, скорее, придирка к словам.
Ну можно ещё каким-то таким способом сделать, но это никуда не годится, потому что надо в конце break
писать.
Scanner scanner = new Scanner(System.in);
double sum = 0;
while(true) {
String s = scanner.next();
if(s.equals("break"))
break;
if(s.matches("[-+]?\\d+(.\\d+)?([eE][-+]?\\d+)?"))
sum += Double.parseDouble(s);
}
System.out.println(sum);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
8559-8559/? E/appnameexample: Unknown bits set in runtime_flags: 0x8000
Только установил Idea в Ubuntu при запуске любого main
Нужно обратиться к вложенному тегу <span>, чтобы передать значение (в данном случае 2940 руб), вот разметка:
Всем добрый день! Столкнулся вот с такой вещью как модулиЕсть импорт: