gpt4 book ai didi

java - 在 Java 中使用正则表达式划分数字列表

转载 作者:行者123 更新时间:2023-12-01 07:47:54 28 4
gpt4 key购买 nike

我有一个由数字列表组成的字符串,如下所示:

000000900100103010330200000005677890212126000020

使用单个正则表达式,我希望获得将原始字符串划分为不同长度的子字符串的许多结果。我的意思是类似

00000009 001 001 03 01 033 02 00000005677890212126 00002 0

所以我需要有这些不同的“组”(我希望这是正确的词)

  • 00000009
  • 001
  • 001
  • 03
  • 01
  • 033
  • 02
  • 00000005677890212126
  • 00002
  • 0

每个元素的长度是固定的,永远不会改变。可能吗?

我已经尝试过:

[0-9]{8}[0-9]{3}[0-9]{3}[0-9]{2}...

但是这当然行不通

最佳答案

您需要使用Pattern,如果找到,请使用Matcher.groupCountMatcher.group(int i)

static final Pattern p = Pattern.compile(
"([0-9]{8})"
+"([0-9]{3})"
+"([0-9]{3})"
+"([0-9]{2})"
+"([0-9]{2})"
+"([0-9]{3})"
+"([0-9]{2})"
+"([0-9]{20})"
+"([0-9]{5})"
+"([0-9]{1})");

private void test(String[] args) {
// NB: I added one more 0 at the start.
Matcher m = p.matcher("0000000900100103010330200000005677890212126000020");
if ( m.find() ) {
for ( int i = 1; i <= m.groupCount(); i++ ) {
System.out.print(m.group(i)+" ");
}
}
}

打印

00000009 001 001 03 01 033 02 00000005677890212126 00002 0

在 Java 8 中,您可以即时构建正则表达式。

static final List<Integer> fieldWidths = Arrays.asList(8,3,3,2,2,3,2,20,5,1);
static final Pattern p = Pattern.compile(
fieldWidths.stream()
.map(i -> "(\\d{"+i+"})")
.collect(Collectors.joining()));

关于java - 在 Java 中使用正则表达式划分数字列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46793901/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com