加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

拆分基于Java中不包括单点的双点

发布时间:2020-12-15 04:21:45 所属栏目:Java 来源:网络整理
导读:我有一个用 Java编写的String str1,我想拆分. String str1 = "S1..R1..M1..D2..N3..S1.R1.M1.D2.N3.S1R1M1D2N3"; 我想将字符串拆分为数组中的以下元素: S1..,R1..,M1..,D2..,N3..,S1.,R1.,M1.,D2,N3.,S1,R1,M1,N3 我想我必须先进行3次传球分裂,首先是……,
我有一个用 Java编写的String str1,我想拆分.

String str1 = "S1..R1..M1..D2..N3..S1.R1.M1.D2.N3.S1R1M1D2N3";

我想将字符串拆分为数组中的以下元素:

S1..,R1..,M1..,D2..,N3..,S1.,R1.,M1.,D2,N3.,S1,R1,M1,N3

我想我必须先进行3次传球分裂,首先是……,然后是.最后还带着信.

首先我试着用..分裂,但我得不到预期的结果:

System.out.println("n Original String = "+str1+"nSplit Based on .. = "+Arrays.toString(str1.split("(?<=[..])")));

上述拆分的结果是:

Original String = S1..R1..M1..D2..N3..S1.R1.M1.D2.N3.S1R1M1D2N3
Split Based on .. = [S1.,.,D2.,S1R1M1D2N3]

我甚至试过:

("(?<=[.+])").

不确定我是否需要去模式/匹配.

需要你的帮助.

解决方法

不使用Positive Lookbehind,而是使用 Positive Lookahead.

String s = "S1..R1..M1..D2..N3..S1.R1.M1.D2.N3.S1R1M1D2N3";
String[] parts = s.split("(?<!A)(?=[A-Z]d)");
System.out.println("Original = " + s + "nSplitted = " + Arrays.toString(parts));

注意:在前瞻断言之前我使用了Negative Lookbehind断言它不可能匹配字符串开头的位置.通过这样做,它可以防止空元素作为列表中的第一项.

产量

Original = S1..R1..M1..D2..N3..S1.R1.M1.D2.N3.S1R1M1D2N3
Splitted = [S1..,N3]

另一种方法是匹配而不是拆分.

String s  = "S1..R1..M1..D2..N3..S1.R1.M1.D2.N3.S1R1M1D2N3";
Pattern p = Pattern.compile("[A-Z]d+.*"); 
Matcher m = p.matcher(s);

List<String> matches = new ArrayList<String>();
while (m.find()) {
   matches.add(m.group());
}

System.out.println(matches);

产量

[S1..,N3]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读