Java - 按通用长度和前缀从字符串中提取文本

标签 java parsing text

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

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

期望的输出:

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

最佳答案

使用 Matcher使用正则表达式 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 是一个 predefined character class相当于[0-9]。此外,{2} 是一个 quantifier这意味着“无论之前,两次”。因此,99\d{2} 匹配两个 9 后跟两个任意数字:

Regular expression visualization

Debuggex Demo

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

关于Java - 按通用长度和前缀从字符串中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19409336/

相关文章:

java - 为什么此代码中会出现 "value X is not a member of Y"错误?

java - 如何在java代码中设置代理配置

java - 为什么这个简单的 Jakarta Regexp 类无法运行?

android - 从 Android 中的 Parcelable 数组中获取值(value)

html - libxml2 -> HTMLparser.h -> htmlReadMemory 中编码的可能值是什么

mysql - 寻找一个选项来比较sql文件和csv格式的txt文件的数据

java - 将 JFrame 的 textArea 设置为文件中的数据?

java - 在 Java 中从 Memcached 存储和检索 Protocol Buffer 数据

python - 如何将额外的火车数据集成到朴素贝叶斯?

json - 检查所需的 json 键(不是值)存在于 golang 中解析的 json 响应中