我有一个java字符串' str'
String str= " 1p qrn qr2 qst 1a1 4at qa qb1 st1 sp su";
我想拆分它以获得以下'部分'阵列
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);
或任何其他可以做到的替代方案。
答案 0 :(得分:5)
这个正则表达式适合你:
[\daqs][\w ]*?(?=\s{2}|$)
对于拆分使用此正则表达式:
\s{2,}(?=[\daqs])
Java代码:
String [] parts = str.split("\\s{2,}(?=[\\daqs])");
System.out.println(Arrays.toString(parts));
答案 1 :(得分:1)
使用您的字符串,这将起作用:
String[] yourArray = subjectString.split("^\\s+|\\s{2,}");
请参阅online demo底部的输出。
这是如何运作的?
看起来您的令牌被多个地方分隔开来。这是我们用来分割的内容:\s{2,}
另外,我们要删除字符串开头的任何空格,因此我们将其添加到拆分条件:^\s+
答案 2 :(得分:0)
我希望我能发表评论而不是回答,但不幸的是我不能这样做,所以我只能做一个答案。你所说的并没有真正发挥作用 - 好像它始于这些角色,它最终将成为
String [] parts={"1p", "qrn", "qr2", "qst" ,"1a1", "4at" ,"qa", "qb1" ,"st1", "sp", "su"};
所以要回答你的实际问题,
[0-9aqs] \ W +
应该按你的意愿工作。如果这不是你想要的,那就澄清它们是如何分开的,因为你如何分裂并不适合"部分元素'以char 0-9,a,q,s开始。"