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

时间:2013-10-16 16:59:45

标签: 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

2 个答案:

答案 0 :(得分:4)

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 s后跟两个任意数字:

Regular expression visualization

Debuggex Demo

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

答案 1 :(得分:1)

您可以使用以下算法来完成您的工作。

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