Получение массива Java путем разбиения строки на условные подстроки

1

У меня есть строка java 'str'

String str= " 1p   qrn qr2 qst   1a1 4at   qa qb1  st1 sp su";

Я хочу разбить его, чтобы получить следующий массив "parts"

String [] parts={"1p","qrn qr2 qst" ,"1a1 4at" ,"qa qb1" ,"st1 sp su"};

Элементы "частей" начинаются с char 0-9, a, q, s.

Помогите мне в подходящем регулярном выражении, чтобы:

String [] parts= str.split(a suitable regex);

или любую другую альтернативу, которая может это сделать.

  • 1
    "qrn qr2 qst" должен быть одной частью? Согласно вашей спецификации это должно быть 3, нет? - Ааа ... понял. Неважно
  • 0
    Да, потому что каждое слово начинается с q.
Показать ещё 2 комментария
Теги:
string
arrays

3 ответа

5
Лучший ответ

Это регулярное выражение должно работать для вас:

[\daqs][\w ]*?(?=\s{2}|$)

Рабочая демонстрация

Для разделения используйте это регулярное выражение:

\s{2,}(?=[\daqs])

Рабочая демонстрация 2

Код Java:

String [] parts = str.split("\\s{2,}(?=[\\daqs])");
System.out.println(Arrays.toString(parts)); 
  • 0
    Вывод, который я получаю:
  • 0
    Вывод, который я получаю: [,,,,] Код используется как: String [] parts = str.split ("[\\ daqs] [\\ w] *? (? = \\ s {2} | $) "); System.out.println (Arrays.toString (части)); Есть какой-то недостаток, любезно помогите исправить это.
Показать ещё 8 комментариев
1

С вашей строкой это будет работать:

String[] yourArray = subjectString.split("^\\s+|\\s{2,}");

Смотрите вывод в нижней части онлайн-демонстрации.

Как это работает?

Похоже, ваши токены разделены несколькими местами. Это то, что мы будем использовать для разделения: \s{2,} Кроме того, мы хотим удалить любые пробелы в начале строки, поэтому добавим это в условия разбиения: ^\s+

0

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

String [] parts={"1p", "qrn", "qr2", "qst" ,"1a1", "4at" ,"qa", "qb1" ,"st1", "sp", "su"};

поэтому, чтобы ответить на ваш реальный вопрос,

[0-9aqs]\w+

должен работать так, как вы хотите. Если это не то, что вы хотите, проясните, как они разделены, потому что то, как вы разбиваете, не соответствует "Элементам" частей ", начинающимся с char 0-9, a, q, s."

Ещё вопросы

Сообщество Overcoder
Наверх
Меню