【问题标题】:Java - Extracting text from string by a common length and prefixJava - 通过通用长度和前缀从字符串中提取文本
【发布时间】:2013-10-16 16:59:45
【问题描述】:

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

【问题讨论】:

    标签: java parsing text


    【解决方案1】:

    使用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

    请注意,在正则表达式中,\dpredefined character class 等价于 [0-9]。此外,{2} 是一个quantifier,意思是“无论之前,两次”。所以,99\d{2} 匹配两个 9s 后跟两个任意数字:

    Debuggex Demo

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-03
        • 1970-01-01
        • 2018-04-30
        • 1970-01-01
        • 2019-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多