字符更改时拆分字符串。可能的正则表达式解决方案?

天天见闻 天天见闻 2023-03-14 教育 阅读: 132
摘要: 如何解决字符更改时拆分字符串。可能的正则表达式解决方案?测试;System.out.println(data + " -><\\1)")))!System.out.println("-----------------------");-----------------------;22];-----------------------,前导零将使数组包含其他空字符串,

如何解决字符更改时拆分字符串。可能的正则表达式解决方案??

这似乎像您期望的那样工作

data.split("0+|(?<=([1-9]))(?=[1-9])(?!\\1)");

测试:

String[] tests = { "11101100112021120", "222222222", "222222122",
        "000000000", "0000100000", "11121222212112133321" };

for (String data : tests) {
    System.out.println(data + " ->" + Arrays.toString(data.split("0+|(?<=([1-9]))(?=[1-9])(?!\\1)")));
    System.out.println("-----------------------");
}

输出:

11101100112021120 ->[111, 11, 11, 2, 2, 11, 2]
-----------------------
222222222 ->[222222222]
-----------------------
222222122 ->[222222, 1, 22]
-----------------------
000000000 ->[]
-----------------------
0000100000 ->[, 1]     // <-- only problem - empty first element 
-----------------------
11121222212112133321 ->[111, 2, 1, 2222, 1, 2, 11, 2, 1, 333, 2, 1]
-----------------------

不幸的是,前导零将使数组包含其他空字符串。要摆脱它,您可以更早地删除这些零data.replaceFirst("^0+(?=[^0])", "")

解决方法

我有一些String仅由数字组成的,并且我想在字符更改时将其拆分。

例如:

  • "11101100112021120" 前往: {"111","11","2","2"}
  • "222222222"{"222222222"}
  • "222222122"{"222222","1","22"}
  • "000000000"{}
  • "0000100000"{"1"}
  • "11121222212112133321"{"111","2222","333","1"}

我想要一个好方法。

我知道两种解决方法:仅是强行强制执行,或者逐节添加。或者,我可以删除所有0并替换为0,然后在字符更改时添加0,然后对0进行拆分,但是这两种方式都显得很愚蠢。如果有人对更好/更美的方法,正则表达式或逻辑有任何想法,那就太好了。

其他相关
计算机硬件加速怎么开,电脑中如何开启3d硬件加速|电脑开启3d硬件加速图文教程

计算机硬件加速怎么开,电脑中如何开启3d硬件加速|电脑开启3d硬件加速图文教程

作者: 天天见闻 时间:2023-10-05 阅读: 80
要编写服务端代码,在创建项目之后,需要编写服务端代码。客户端代码的编写需要在服务端代码编写完成后,编写用于连接到服务端的客户端程序。Sleep(5000);}``在这个测试用例中,注入@和两个类的实例,在测试方法中调用start方法,启动服务端和客户端,最后等待5秒,测试连接是否成功。运行以上的测试代码,如果测试通过,就表示我们成功地实现了功能。...
PHP程序员容易忽略的几点精华是什么?

PHP程序员容易忽略的几点精华是什么?

作者: 天天见闻 时间:2022-07-15 阅读: 337
我发现很多的PHP程序员,尤其是学习还不是很久的,都不知道PHP的精华所在。Perl当年如何在商界出名?其强大的正则表达式。他是一门从Unix下发展起来的语言,当然也就继承了Perl的很多特点,同时C的优点都有。快速、简洁、明了,尤其是C程序员,PHP是至爱,我就是深爱着“PHP”)。这里,我想来写一篇PHP的变量、数组应用技巧和PHP的正则表达式、PHP的模板应用,以后有时间再写PHP 与COM、PHP与XML的完全结合。而主流的PHP如何做到呢?...
一些关于罗马字符的知识

一些关于罗马字符的知识

作者: 天天见闻 时间:2022-03-03 阅读: 1178
下面是关于构造罗马数字的一些通用的规则的介绍:字符是叠加的。至多可以重复三次。小1)。不能连续重复四次)。含五字符不能重复。常表示为X,而从来不用VV来表示。罗马数字一般从高位到低位书写,从左到右阅读,因此不同顺序的字符意义大不相同。小100)。1的数字)。...
回车与换行的区别

回车与换行的区别

作者: 天天见闻 时间:2022-02-22 阅读: 1640
我一直没有搞得很清楚,回车和换行符有啥区别。回车 \r 本义是光标重新回到本行开头换行符,r的英文return,控制字符可以写成CR,即Carriage Return. 于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。c++语言编程时\r 就是return 回到 本行 行首 这就会把这一行以前的输出 覆盖掉...
正则表达式中括号的用法

正则表达式中括号的用法

作者: 天天见闻 时间:2022-02-21 阅读: 2478
括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开中括号,最后一个命令可以没有分号,各……Linux shell中括号的用法 概述 本文主要介绍Linux中括号的用法,主要包含判断文件和变量。**注意事项**:中括号两边必须有空格。这篇文章主要介绍了JS使用正则表达式获取小括号、中括号及花括号内容的方法,涉及javascript针对三种括号正则匹配的相关操作技巧,需要的朋友可以参考下...
各操作系统中的换行符差异

各操作系统中的换行符差异

作者: 天天见闻 时间:2022-02-19 阅读: 3713
HTTP/1.1将CRLF的序列定义为任何协议元素的行尾标志,但这个规定对实体主体除外。它的每一行都是以CRLF结尾的。计算机出现之前,是使用电传打字机打印字符的,它每秒可以打10个字符。Windows中打开Linux/UNIX系统下的文件时,所有的文字都会变成一行。而^M符号是Linux等系统规定的一个特殊标记,它占一个字符的大小,它不是^和M的组合,是打印不出来的...
我来说两句

年度爆文