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

Java 如何在没有正则表达式的情况下从字符串中提取数字,java,arrays,string,parsing,guava,Java,Arrays,String,Parsing,Guava,我想从字符串中提取Numbers,示例消息如下 您好,您的账号295093491783已扣除17820。如果您没有收到确认电话9897123456 现在我用的是谷歌的番石榴 String temp = CharMatcher.JAVA_DIGIT.retainFrom(message); 我得到的结果类似于295093491783178209897123456,我想要的格式是 String[] a = {"295093491783", "17820", "9897123456"} 任何帮助都

我想从字符串中提取
Number
s,示例消息如下

您好,您的账号295093491783已扣除17820。如果您没有收到确认电话9897123456

现在我用的是谷歌的番石榴

String temp = CharMatcher.JAVA_DIGIT.retainFrom(message);
我得到的结果类似于295093491783178209897123456,我想要的格式是

String[] a = {"295093491783", "17820", "9897123456"}
任何帮助都将不胜感激。我想用番石榴图书馆来做这件事

注意:-

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

  • 我当前的解决方案几乎以6000 tps(每秒事务量)的速度运行

  • 这可能适用于您:

    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()]);
    }
    
    static String[]getNumbers(字符串来自){
    列表编号=新的ArrayList();
    StringBuilder编号=新的StringBuilder();
    for(int i=0;i0){
    number.add(number.toString());
    number.setLength(0);
    }
    }
    如果(number.length()>0){
    number.add(number.toString());
    }
    返回numbers.toArray(新字符串[numbers.size()]);
    }
    

    但您是否确实对regex解决方案进行了基准测试?

    您每秒需要处理多少个?目前我的解决方案几乎以6000 TPS(每秒事务数)运行@PrakharNigam您是否能够对regex和matcher解决方案进行基准测试?@nullpointer尚未进行基准测试。。。仍然要继续。到目前为止,我还没有对正则表达式解决方案进行基准测试。@PrakharNigam让我知道结果,因为您的输入非常小,所以不使用正则表达式似乎是一个微小的优化。@KarolDowbecki实际上这是一条消息的单个片段。我的实际消息可以是多部分的,最少3个片段,最多256个片段。我正在比较这两种解决方案,我将很快分享这两种解决方案的得分