Страницы

Поиск по вопросам

среда, 17 апреля 2019 г.

Как в Java из строки сделать список чисел?

Есть строка с цифрами от 0 до 9, без пробелов. На выходе должен получиться список int, при чем если после какой-то единицы стоит ноль, то такие ноль и единица должны быть записаны в списке как 10. Таким образом не выходе должен получиться список из чисел от 1 до 10. Как это сделать?


Ответ

Извлечение чисел от 0 до 10 из потока циферь. Главное сформулировать условие, когда заканчивается одно число и начинается другое. Если на предыдущей итерации получена единица и сейчас перед нами ноль, то мы всё ещё находимся на том же самом числе (на десятке). В остальных случаях мы перешли на следующее число. Когда случился переход на следующее число, предыдущее надо вывести (поместить в массив)
// чтобы просто переводить символы в числа/цифры public static Map CHAR2DIGIT = new HashMap() {{ put('0', 0); put('1', 1); put('2', 2); put('3', 3); put('4', 4); put('5', 5); put('6', 6); put('7', 7); put('8', 8); put('9', 9); }};
public static List numbers(String input) { List numbers = new ArrayList<>();
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); } }

Комментариев нет:

Отправить комментарий