Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 2 / 3
Регистрация: 29.01.2017
Сообщений: 83
1

Пустые строки после String.split

10.06.2017, 21:50. Показов 3536. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Допустим есть строка математического выражения. Перед парсингом её надо разбить на лексемы.
Я для этого использовал String.split с регулярным выражением look around
Java
1
tokens = expr.split("((?<=" + delimeter + ")|(?=" + delimeter + "))");
где delimeter - это символьный класс со всеми операторами.

Но, если строка начинается со скобки, или с унарного минуса, то в полученный массив попадают элементы-пустые строки (та же фигня и в конце строки)

"-5+3" => "", "-", "5"...

Почему это происходит, я понимаю, ведь в этом и заключается работа lookaround выражения.
Но из-за этого дальнейший парсинг невозможен, потому хочу понять, как эту проблему устранить.
Хочу, но не могу.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2017, 21:50
Ответы с готовыми решениями:

string split
Есть строка с числами, записанными через разное количество пробелов: &quot;4 6 -4 0&quot; Подскажите...

String.split бросает NullPointerException
Делал задачу,все было хорошо,но потом при запуске стал выдавать NullPointerException,читал на...

Поменять первое и последнее слово в строке местами (string.split)
Используя метод split класса String нужно поменять в строке первое и последнее слово.Не...

Разделение строки через split()
Есть строка содержащая произвольно количество не строго типизированных подстрок разделенных...

3
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
10.06.2017, 22:19 2
какой-то не очень хороший способ парсить выражения
0
0 / 2 / 3
Регистрация: 29.01.2017
Сообщений: 83
10.06.2017, 22:38  [ТС] 3
xoraxax, если есть предложения и пожелания, с радостью выслушаю)
0
0 / 2 / 3
Регистрация: 29.01.2017
Сообщений: 83
13.06.2017, 01:52  [ТС] 4
Решил эту проблему сам
так было:
Java
1
tokens = expr.split("((?<=" + delimeter + ")|(?=" + delimeter + "))");
то есть за реальный разделитель split принимал пустые места перед и после delimeter, в итоге строка "-5+3" делилась на:
"", "-", "5", "+", "3"
Всё бы хорошо, но программа считала пустое место перед минусом, а мне это ну вот совсем не нужно

В итоге сделал я так:

Java
1
tokens = expr.split("((?<=" + DELIMETER + ")(?=" + OPERAND + "))|((?<=" + OPERAND + ")(?=" + DELIMETER + "))");
Конструкция в два раза больше, зато верная. Разделителем принимается пустое место между delimeter и operand (те места, где запись чисел или переменных сменяется на запись операторов: "5+", "-3" и т.д.)
Теперь всё работает как надо, никаких мнимых операндов-пустых-строк программа не генерирует.

Ох же ж и повеселили меня эти regexp'ы...
0
13.06.2017, 01:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2017, 01:52
Помогаю со студенческими работами здесь

Разбор строки, не выходит не split() не StringTokinizer
Добрый день, пытаюсь разобрать на состовляющие строку вида: while (a != 2.4) { b = 3.8; a--;}....

Разделение строки на 2 подстроки с последующей записью последних в HashMap<String, String>
Дорбого времени суток. Застрял на такой глупости блок кода который читает построчно тхт файл и...

Пустые символы в конце строки
Строка отправляется byte data = &quot;123&quot;.getBytes(); InetAddress addr =...

Удалить пустые строки двухмерного массива
Помогите доделать функцию, чтобы она заменяла посылаемый на неё массив на тот, что уже получется в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru