通过将字符串拆分为条件子字符串获取java数组

通过将字符串拆分为条件子字符串获取java数组,java,arrays,regex,string,Java,Arrays,Regex,String,我有一个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"}; “parts”的元素以字符0-9、a、q、s开头 请帮助我获取suitabe regex,以便: String [] parts= str.split(

我有一个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"};
“parts”的元素以字符0-9、a、q、s开头

请帮助我获取suitabe regex,以便:

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)); 

此正则表达式适用于您:

[\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[] yourArray = subjectString.split("^\\s+|\\s{2,}");
请参见本文档底部的输出

这是如何工作的?

看起来你的代币被多个地方隔开了。这就是我们将用来拆分的内容:
\s{2,}

此外,我们希望删除字符串开头的所有空格,因此我们将其添加到拆分条件中:
^\s+

我希望我可以进行注释而不是回答,但不幸的是我不能,所以我只能做一个回答。你所说的其实不起作用——好像它是从那些角色开始的,最终会变成一个角色

String [] parts={"1p", "qrn", "qr2", "qst" ,"1a1", "4at" ,"qa", "qb1" ,"st1", "sp", "su"};
所以要回答你的实际问题

[0-9aq]\w+


你想干什么就干什么。如果这不是您想要的,请澄清它们是如何分割的,因为分割的方式不适合“部分”的元素以字符0-9、a、q、s开头。”

我希望我可以评论而不是回答,但不幸的是我不能,所以我只能做一个回答。你所说的其实不起作用——好像它是从那些角色开始的,最终会变成一个角色

String [] parts={"1p", "qrn", "qr2", "qst" ,"1a1", "4at" ,"qa", "qb1" ,"st1", "sp", "su"};
所以要回答你的实际问题

[0-9aq]\w+


你想干什么就干什么。如果这不是您想要的,请澄清它们是如何分割的,因为分割方式不符合“部分”的元素以字符0-9、a、q、s开头。

“qrn qr2 qst”应该是一个部分?根据你的规格应该是3,不是吗啊。。。知道了。没关系,因为每个单词都以q开头,所以它应该是字符串[]部分={“1p”、“qrn”、“qr2”、“qst”、“1a1”、“4at”、“qa”、“qb1”、“st1”、“sp”、“su”};仅供参考,在我的答案中添加了Java代码在线演示。:)“qrn qr2 qst”应该是一部分吗?根据你的规格应该是3,不是吗啊。。。知道了。没关系,因为每个单词都以q开头,所以它应该是字符串[]部分={“1p”、“qrn”、“qr2”、“qst”、“1a1”、“4at”、“qa”、“qb1”、“st1”、“sp”、“su”};仅供参考,在我的答案中添加了Java代码在线演示。:)我得到的输出是:我得到的输出是:[,,,],代码被用作:String[]parts=str.split(“[\\daq][\\w]*?(?=\\s{2}|$)”;System.out.println(Arrays.toString(parts));有一些缺陷,请帮助更正。System.out.println(parts.length);给出1,当它应该大于1时,请确认这件事。遗憾的是,即使提供了完整的工作代码,您也无法调整它。请参阅此工作演示:在我的计算机上重置java和netbean后,您的代码在我的计算机上运行良好。谢谢,伟人。我得到的输出是:我得到的输出是:[,,,],代码用作:String[]parts=str.split(“[\\daqs][\\w]*?(?=\\s{2}|$”);System.out.println(Arrays.toString(parts));有一些缺陷,请帮助更正。System.out.println(parts.length);给出1,当它应该大于1时,请确认这件事。遗憾的是,即使提供了完整的工作代码,您也无法调整它。请参阅此工作演示:在我的计算机上重置java和netbean后,您的代码在我的计算机上运行良好。谢谢你,伟人。