当前位置: 首页 > 面试题库 >

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

卫兴邦
2023-03-14
问题内容

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

例如:

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

我想要一个好方法。

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


问题答案:

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

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])", "")



 类似资料:
  • 问题内容: 我有一个字符串,需要根据出现的“,”(逗号)进行拆分,但是需要忽略在一对括号内出现的任何字符串。例如, 应拆分为 问题答案: 对于非嵌套 嵌套 (括号内的括号)

  • 我有一个表格形式的命令输出。我正在解析结果文件的输出并将其存储在字符串中。一行中的每个元素由一个或多个空格字符分隔,因此我使用正则表达式匹配1个或多个空格并拆分它。但是,在每个元素之间插入一个空格: 还有更好的方法吗? 每次拆分后,str2都会附加到列表中。

  • 问题内容: 我有以下显示这种格式的文件名: 我想提取第二个下划线之后和之前的中间两个时间戳部分。因此,我使用了以下Python正则表达式字符串拆分: 但这在返回的列表中给了我两个额外的空字符串: 如何仅获取两个时间戳信息?即我想要: 问题答案: 不要使用,使用正则表达式/对象的方法。 您甚至可以命名捕获组并在字典中检索它们,尽管您使用的不是。(这种情况下的regex模式将类似于)

  • 我试图匹配正则表达式模式来替换特定字符串。 示例文本:ABC/1111111 031111111/0318*12345678 我想用“/1222”替换03和18 in/0318,即(2022年12月)。我尝试了string replaceAll方法,但它替换了提供的示例字符串中所有匹配的字符。比如下面; 我尝试过的示例代码: 样本文本。替换(匹配器组(2),“12”); 样本文本。替换(匹配器组(

  • 问题内容: 我有一个格式为String的String ,其中包含任意数量的元素。我想将它拆分的逗号分隔的坐标,也就是检索,和。 我可以用Java正则表达式来做吗?我是一个完整的菜鸟,但希望Java regex足够强大。如果不是,您是否可以建议替代方法? 问题答案: 您可以为此使用。 在 正回顾后发意味着它必须在前面加。在 正向前查找意味着它必须由suceeded 。该意味着它必须在劈裂后的任何空间

  • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?