从Java上的字符串获取第一个数字

时间:2018-12-30 02:35:35

标签: java string parsing

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

例如:

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

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

3 个答案:

答案 0 :(得分:2)

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

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

打印(按要求)

5634

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

最简单的选择可能是只使用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)就会分割字符串。这样会将前导数字保留在拆分数组的第一个字符串中。