Java - 通过公共长度和前缀从字符串中提取文本

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
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
4

使用正则表达式99\d{2}Matcher

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} 匹配两个 9 后跟两个任意数字:

正则表达式可视化

Debuggex演示

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


1
您可以按照以下算法完成您的工作。
  1. 将字符串根据空格字符进行拆分。
  2. 对于每个拆分出的字符串,检查其长度。如果长度为4,则需要进一步检查该字符串,否则将其丢弃。
  3. 如果前两个字符是“99”,则可以使用startsWith()方法来判断该字符串是否为所需数字。
  4. 将满足条件3的字符串解析为整数,并将其存储在数组或列表中。
  5. 继续处理剩余字符串。
  6. 显示包含所需项目的最终数组/列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,