如何在没有正则表达式的情况下从字符串中提取数字

时间:2018-03-17 17:27:45

标签: java arrays string parsing guava

我想从字符串中提取Number,示例消息就像这样

  

您好您的帐号NO 295093491783已被17820扣除。如果您没有收到Ack电话9897123456。

现在我正在使用Google的Guava像这样

String temp = CharMatcher.JAVA_DIGIT.retainFrom(message);

我得到的结果如 295093491783178209897123456 ,我想要的格式是

String[] a = {"295093491783", "17820", "9897123456"}

任何帮助将不胜感激。我想用番石榴库来做这件事。

注意 : -

  1. 我不想使用正则表达式,因为CharMatcher比正则表达式快。

  2. 我目前的解决方案几乎以 6000 tps (每秒事务数)运行。

1 个答案:

答案 0 :(得分:1)

这可能对您有用:

static String[] getNumbers(String from) {
    List<String> numbers = new ArrayList<>();
    StringBuilder number = new StringBuilder();
    for (int i = 0; i < from.length(); i++) {
        char c = from.charAt(i);
        if (Character.isDigit(c)) {
            number.append(c);
        } else if (number.length() > 0){
            numbers.add(number.toString());
            number.setLength(0);
        }
    }
    if (number.length() > 0) {
        numbers.add(number.toString());
    }
    return numbers.toArray(new String[numbers.size()]);
}

但你真的对正则表达式解决方案进行了基准测试吗?