【问题标题】:Getting java array by splitting a string into conditional substrings通过将字符串拆分为条件子字符串来获取java数组
【发布时间】:2014-07-26 02:08:01
【问题描述】:

我有一个 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 开头。

帮我找一个合适的正则表达式,这样:

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

或任何其他可以做到这一点的替代品。

【问题讨论】:

  • "qrn qr2 qst" 应该是一部分?根据您的规格,它应该是 3,不是吗? - 啊……明白了。没关系
  • 是的,因为每个单词都以q开头。
  • 所以它应该是 String [] parts={"1p","qrn", "qr2", "qst" ,"1a1","4at" ,"qa", "qb1" , “st1”、“sp”、“su”};
  • 仅供参考,在我的答案中添加了 Java 代码在线演示。 :)

标签: java arrays regex string


【解决方案1】:

这个正则表达式应该适合你:

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

Working Demo

对于拆分,请使用此正则表达式:

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

Working Demo 2

Java 代码:

String [] parts = str.split("\\s{2,}(?=[\\daqs])");
System.out.println(Arrays.toString(parts)); 

【讨论】:

  • 我得到的输出是:
  • 我得到的输出是:[ , , , , ] 代码用作: String [] parts= str.split("[\\daqs][\\w ]*?( ?=\\s{2}|$)"); System.out.println(Arrays.toString(parts));有一些瑕疵,请帮忙改正。
  • System.out.println(parts.length);给1,应该大于1的时候,请确认一下。
  • 遗憾的是,即使在为您提供了完整的工作代码之后,您也无法对其进行调整。请参阅此工作演示:ideone.com/OpHYat
  • 在我的计算机上重置 java 和 netbean 后,您的代码在我的计算机上运行良好。谢谢好人。
【解决方案2】:

使用您的字符串,这将起作用:

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

查看online demo底部的输出。

这是如何工作的?

您的令牌似乎被多个位置分隔。这是我们将用来拆分的:\s{2,} 另外,我们想去掉字符串开头的所有空格,所以我们在分割条件中加上:^\s+

【讨论】:

    【解决方案3】:

    我希望我可以发表评论而不是回答,但不幸的是我不能,所以我只能回答。你说的实际上并没有用 - 好像它是从那些字符开始的,它最终会是

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

    所以回答你的实际问题,

    [0-9aqs]\w+

    应该按您的意愿工作。如果这不是您想要的,请说明它们是如何拆分的,因为您的拆分方式不适合“'parts' 的元素以 char 0-9、a、q、s 开头。”

    【讨论】:

      猜你喜欢
      • 2016-04-28
      • 1970-01-01
      • 2017-06-27
      • 2014-09-26
      • 2012-02-22
      • 1970-01-01
      相关资源
      最近更新 更多