1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем imDaniX, 15 окт 2017.

Статус темы:
Закрыта.
  1. Автор темы
    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..."

    Я не очень умный, поэтому прошу тапками не бить. Больно.
    Заранее спасибо за помощь~
     
  2. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Пробелы еще есть же.
     
  3. Автор темы
    imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Не уверен - предлагаете .split("\\s")? Я сейчас так и делаю, собстна, но это как-то грустненько.

    ~

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

    Если кто может подсказать адекватный вариант - прошу описать :О
     
  4. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

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

    alexandrage Старожил Пользователь

    Баллы:
    173
    Я ему намекал брать целое слово. Не дошло.
     
  6. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Дак там не только пробелы. Запятые еще, точки. Хз че еще рядом легальное может быть.
     
  7. Автор темы
    imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    ~

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

    Если кому есть чего добавить - отпишитесь в ЛС.
     
Статус темы:
Закрыта.

Поделиться этой страницей