Страницы

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

понедельник, 24 февраля 2020 г.

Режем строку, сохраняя разделители

#java #строки


Как можно строку формата: "-99/9" разбить на массив подстрок {"-","99","/","9"}?
    


Ответы

Ответ 1



Зачем усложнять? Есть числа и что-то между ними. Выделяем числа с двух сторон пробелами, нормализуем строку, чтобы после разбиения не появилось пустых элементов и готово. import java.util.Arrays; public class Main { public static void main(String[] args) { String str = "2+2*24-78"; str = str.replaceAll("(\\d+)"," $1 "); str = str.trim(); String[] stack = str.split(" "); System.out.println(Arrays.toString(stack)); } } В вопросе ничего не говорилось про десятичный разделитель, функции и скобки. Правильным подходом по решению задачи это не сразу разбивать строку на отдельные лексемы, а считывая ее последовательно обрабатывать конечным автоматом. За основу можно взять алгоритм из статьи про обратную польскую нотацию.

Ответ 2



Если не известен заранее формат строки или он может изменяться, то я бы предложил следующий алгоритм. Берем длинну строки Создаем пустой список для заполнения Циклом проходим по символам. Выбираем символ и смотрим числовой он или нет (Приводим символ к числу, потом к строке и проверяем на совпадение). Если числовой то смотрим на последний элемент списка и если там тоже число, то модифицируем дописыванием в конец строки последнего списка.

Ответ 3



На вскидку - регуляркой. Или что-то упускаю? Получится что-то вроде такого: (regex) /^(-|+)?(\d+)(\/)(\d+)$/

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

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