有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个文本字符串“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) 个答案

  1. # 1 楼答案

    ^{}与regex 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
    

    另见:^{}

    注意,在正则表达式中\dpredefined character class等价于[0-9]。此外,{2}是一个quantifier,意思是“无论前面发生什么,都会发生两次”。因此,99\d{2}匹配两个9后跟两个任意数字:

    Regular expression visualization

    Debuggex Demo

    如果您要用许多不同的字符串来执行这个操作,请考虑预先编译正则表达式并将^ {CD3>}实例存储在某些^ {CD10>}变量中,每当您想进行操作时使用它。p>

  2. # 2 楼答案

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

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