У меня есть строка 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);
или любую другую альтернативу, которая может это сделать.
Это регулярное выражение должно работать для вас:
[\daqs][\w ]*?(?=\s{2}|$)
Для разделения используйте это регулярное выражение:
\s{2,}(?=[\daqs])
Код Java:
String [] parts = str.split("\\s{2,}(?=[\\daqs])");
System.out.println(Arrays.toString(parts));
С вашей строкой это будет работать:
String[] yourArray = subjectString.split("^\\s+|\\s{2,}");
Смотрите вывод в нижней части онлайн-демонстрации.
Как это работает?
Похоже, ваши токены разделены несколькими местами. Это то, что мы будем использовать для разделения: \s{2,}
Кроме того, мы хотим удалить любые пробелы в начале строки, поэтому добавим это в условия разбиения: ^\s+
Я бы хотел, чтобы я мог комментировать, а не отвечать, но, к сожалению, я не могу, поэтому должен просто ответить. То, что вы сказали, на самом деле не работает - как будто это началось с этих персонажей, это закончится тем, что
String [] parts={"1p", "qrn", "qr2", "qst" ,"1a1", "4at" ,"qa", "qb1" ,"st1", "sp", "su"};
поэтому, чтобы ответить на ваш реальный вопрос,
[0-9aqs]\w+
должен работать так, как вы хотите. Если это не то, что вы хотите, проясните, как они разделены, потому что то, как вы разбиваете, не соответствует "Элементам" частей ", начинающимся с char 0-9, a, q, s."