Помогите Деление строки на элементы между слов

  • Автор темы Автор темы imDaniX
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

imDaniX

Активный участник
Пользователь
Баллы
96
Имя в Minecraft
imDaniX
Здрасте, форумчане.

Появилась проблема - нужно разделить строку между слов, но включая эти самые слова <- крайне непонятно, но покажу на примере.

Допустим, есть строка
"Here's some soups for your felling up, bro. You need to eat these soups, get up and do some updating things."

Нужно поделить её словами "soups" и "up".

В итоге нужно получить следующий массив:
"Here's some "; "soups"; " for your feeling "; "up"; ", bro. You need to eat these "; "soups"; "get "; "up"; "and do some "; "up"; "dating things."
"Here's some |soups| for your felling |up|, bro. You need to eat these |soups|, get |up| and do some |up|dating things."

Был таков вариант:
Код:
msg.split("(?<=(soups|up))|(?=(soups|up))");
Все, в целом, гладко. Однако проблема в том, что "up" также разделяет слово "soups", и выходит нечто
"Here's some "; "so"; "up"; "s"; "for your..."
"Here's some |so|up|s| for your..."

Я не очень умный, поэтому прошу тапками не бить. Больно.
Заранее спасибо за помощь~
 
Пробелы еще есть же.
Не уверен - предлагаете .split("\\s")? Я сейчас так и делаю, собстна, но это как-то грустненько.

~

Представив, что такое никак не сделать одним действием через regex, решил, что самый простой выход(пущай и оптимизации 0) - использовать сначала .split("(?<=(soups))|(?=(soups))"), а строки получившегося массива, если они не .equals("soups"), пропускать через .split("(?<=(up))|(?=(up))"), и уже там творить свою несуразицу.

Если кто может подсказать адекватный вариант - прошу описать :О
 
Представив, что такое никак не сделать одним действием через regex, решил, что самый простой выход(пущай и оптимизации 0) - использовать сначала .split("(?<=(soups))|(?=(soups))"), а строки получившегося массива, если они не .equals("soups"), пропускать через .split("(?<=(up))|(?=(up))"), и уже там творить свою несуразицу.
Ну да, ты либо сплиттишь эти слова с условием по 2 сторонам (например при условии, что рядом с up нет других букв, либо сплиттишь поочередно начиная с более комплексных слов.
Можно попотеть и написать одну функцию с рекурсией, чтобы туда закидывать строку и сколько угодно разделителей слов. Тобишь она берет 1 слово из массива, сплиттит, передает дальше второе и пошло поехало.
 
Ну да, ты либо сплиттишь эти слова с условием по 2 сторонам (например при условии, что рядом с up нет других букв, либо сплиттишь поочередно начиная с более комплексных слов.
Можно попотеть и написать одну функцию с рекурсией, чтобы туда закидывать строку и сколько угодно разделителей слов. Тобишь она берет 1 слово из массива, сплиттит, передает дальше второе и пошло поехало.
Я ему намекал брать целое слово. Не дошло.
 
Я ему намекал брать целое слово. Не дошло.
.split("\\s")? Я сейчас так и делаю, собстна, но это как-то грустненько.

~

Ну да, ты либо сплиттишь эти слова с условием по 2 сторонам (например при условии, что рядом с up нет других букв, либо сплиттишь поочередно начиная с более комплексных слов.
Можно попотеть и написать одну функцию с рекурсией, чтобы туда закидывать строку и сколько угодно разделителей слов. Тобишь она берет 1 слово из массива, сплиттит, передает дальше второе и пошло поехало.

Ну-с, спасибо за развернутый ответ. Остановлюсь на варианте "с велика до мала", т.е. использовать .split() начиная с больших слов. Тему закрываю, чтобы не развелось "дискуссий".

Если кому есть чего добавить - отпишитесь в ЛС.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх