Есть строка с цифрами от 0 до 9, без пробелов. На выходе должен получиться список int, при чем если после какой-то единицы стоит ноль, то такие ноль и единица должны быть записаны в списке как 10. Таким образом не выходе должен получиться список из чисел от 1 до 10. Как это сделать?
Ответ
Извлечение чисел от 0 до 10 из потока циферь.
Главное сформулировать условие, когда заканчивается одно число и начинается другое.
Если на предыдущей итерации получена единица и сейчас перед нами ноль, то мы всё ещё находимся на том же самом числе (на десятке). В остальных случаях мы перешли на следующее число.
Когда случился переход на следующее число, предыдущее надо вывести (поместить в массив)
// чтобы просто переводить символы в числа/цифры
public static Map
public static List
int number = -1; // сюда будем собирать очередное число. -1 когда находимся в самом начале потока и ещё не получено ни одной цифры
for (int i = 0; i < input.length(); i++) {
int digit = CHAR2DIGIT.get(input.charAt(i)); // очередная цифра
if (digit != 0 || number != 1) { // условие перехода на следующее число
if (number > -1) numbers.add(number); // вывод предыдущего
number = 0; // сброс для расчёта нового числа
}
number = number * 10 + digit; // незамысловатая формула для сбора числа из его циферь
}
if (number > -1) numbers.add(number); // не забыть вывести последнее число после цикла
return numbers;
}
public static void main(String[] args) {
for (Integer n : numbers("1234567891001")) {
System.out.println(n);
}
}
Комментариев нет:
Отправить комментарий