4

我有一个文本字符串“ 9926 9928 9951 9953 0 30 57 12 40 54 30”

我对以 99 为前缀的 4 位数字感兴趣。其他数字是多余的。

期望的输出:

9926
9928
9951
9953

我的代码:

String str = " 9926 9928 9951 9953 0 30 57 12 40 54 30";
Iterable<String> result = Splitter.onPattern("99").fixedLength(4).split(str);

实际输出:

992
6 99
28 9
951 
9953
 0 3
0 57
 12 
40 5
4 30
4

2 回答 2

4

将 aMatcher与正则表达式一起使用99\d{2}

String str = " 9926 9928 9951 9953 0 30 57 12 40 54 30";

Matcher m = Pattern.compile("99\\d{2}").matcher(str);

while (m.find())
    System.out.println(m.group());
9926
9928
9951
9953

也可以看看:Pattern

请注意,在正则表达式\d中是一个预定义的字符类,相当于[0-9]. 此外,{2}是一个量词,意思是“无论之前,两次”。因此,99\d{2}匹配两个9s 后跟两个任意数字:

正则表达式可视化

调试演示

如果您要使用许多不同的字符串执行此操作,请考虑预编译正则表达式并将Pattern实例存储在某个static final变量中,以便在您想要执行操作时使用它。

于 2013-10-16T17:02:33.617 回答
1

你可以使用下面的算法去做你的事情。

  1. 将字符串拆分为whitespace字符。
  2. 对于每个拆分的字符串,检查长度。如果是 4,则需要进一步检查该字符串,否则将其丢弃。
  3. 如果前2个字符是“99”,你可以使用这个startsWith()方法,那么它就是你需要的数字。
  4. 将上述字符串(满足条件 3)解析为整数,并将其存储在数组或列表中。
  5. 继续直到有更多的字符串。
  6. 显示包含所需项目的最终数组/列表。
于 2013-10-16T17:02:51.617 回答