【问题标题】:Get the first numbers from a String on Java从 Java 上的字符串中获取第一个数字
【发布时间】:2018-12-30 02:35:35
【问题描述】:

假设我有一个以数字开头的字符串。 如何获取/提取所有第一个数字并将它们转换为整数?不想要字符串上的所有数字,我想要从第一个数字到最后一个数字之前的任何其他字母或字符。

例如:

 String s= "5634-abofrda/+l8908"; // 5634
 String str="78695t08675jgk"; // 78695

我如何获得号码 5634? 我正在寻找一个通用的解决方案,而不是针对所描述的案例。

【问题讨论】:

    标签: java string parsing


    【解决方案1】:

    此方法可用于在找到另一个字符之前返回一个数字

    static int getNumbers(String s) {
    
        String[] n = s.split(""); //array of strings
        StringBuffer f = new StringBuffer(); // buffer to store numbers
    
        for (int i = 0; i < n.length; i++) {
            if((n[i].matches("[0-9]+"))) {// validating numbers
                f.append(n[i]); //appending
            }else {
                //parsing to int and returning value
                return Integer.parseInt(f.toString()); 
            }   
        }
        return 0;
     }
    

    用法:

    getNumbers(s);
    getNumbers(str);
    

    输出:

    5634
    78695
    

    【讨论】:

    • 它不适用于没有字母的字符串,例如:12345。该代码将返回 0。如果要使其正常工作,您需要在 return 0 上方添加该行;语句... if(f.length() > 0) return Integer.parseInt(f.toString());
    【解决方案2】:

    使用正则表达式。匹配和分组数字后跟任何内容,并用匹配的组替换所有内容。喜欢,

    System.out.println(s.replaceAll("(\\d+).+", "$1"));
    

    打印(按要求)

    5634
    

    【讨论】:

    • 这个解决方案很酷,但如果输入字符串只包含数字,它就会失败。使用 "(\\d+).*" 避免删除最后一位。
    【解决方案3】:

    最简单的选择可能是只使用String#split

    String s = "5634-abofrda/+l8908";
    String nums = s.split("-")[0];
    

    请注意,如果连字符不应出现在输入字符串中,那么nums 将只是整个字符串。

    或者你想要这个:

    String s = "5634-abofrda/+l8908";
    String nums = s.split("(?=\\D)")[0];
    

    每次出现非数字字符时,前瞻(?=\D) 都会拆分字符串。这会将前导数字留在拆分数组的第一个字符串中。

    【讨论】:

    • ty 但事实上我正在寻找更通用的东西。您的解决方案有效,但前提是我有一个“-”分隔它们。
    • @eyelash 嗯...如果没有逻辑将数字与其他所有内容分开,那么我们该如何回答?
    • 当 Char 不是数字时,我想停止“分离”过程。如果我不清楚,我很抱歉。
    • 谢谢。最后一件事,在您的最后一个解决方案中,[0] 表示它从第一个位置开始?因此,在您的第一个解决方案中,如果有多个“-”,结果将是一个字符串数组?
    • [0] 只是表示从字符串数组中取出第一个字符串,就是这样。
    猜你喜欢
    • 2015-02-08
    • 1970-01-01
    • 2018-07-11
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    相关资源
    最近更新 更多