从Java中获取int,也包含字母

时间:2010-02-26 00:49:54

标签: java integer

如何从423e之类的字符串中获取int值 - 即包含数字但也可能是字母的字符串?

Integer.parseInt()失败,因为字符串必须完全是数字。

6 个答案:

答案 0 :(得分:77)

将所有非数字替换为空白:其余字符串仅包含数字。

Integer.parseInt(s.replaceAll("[\\D]", ""))

这也会删除数字之间的非数字,因此"x1x1x"变为11

如果您需要确认该字符串是由一系列数字(至少一个)可能跟随一个字母组成的,那么请使用:

s.matches("[\\d]+[A-Za-z]?")

答案 1 :(得分:19)

NumberFormat类只解析字符串,直到它到达不可解析的字符:

((Number)NumberFormat.getInstance().parse("123e")).intValue()
因此,

将返回123。

答案 2 :(得分:10)

除非您在讨论基数为16的数字(有一种方法可以解析为Hex),否则您需要明确地分离出您感兴趣的部分,然后进行转换。毕竟,基数为10的23e44e11d的语义是什么?

如果您确定只有一个数字,正则表达式可以解决问题。 Java有一个内置的正则表达式解析器。

另一方面,如果您的目标是连接所有数字并转储alpha,那么通过逐个字符迭代来构建StringBuilder的字符串然后解析那个数字就可以了。 p>

答案 3 :(得分:5)

您也可以使用扫描仪:

Scanner s = new Scanner(MyString);
s.nextInt();

答案 4 :(得分:4)

只需浏览字符串,像往常一样构建一个int,但忽略非数字字符:

int res = 0;
for (int i=0; i < str.length(); i++) {
    char c = s.charAt(i);
    if (c < '0' || c > '9') continue;
    res = res * 10 + (c - '0');
}

答案 5 :(得分:2)

也许获取字符串的大小并遍历每个字符并在每个字符上调用isDigit()。如果是数字,则将其添加到仅在调用Integer.parseInt()之前收集数字的字符串。

类似的东西:

    String something = "423e";
    int length = something.length();
    String result = "";
    for (int i = 0; i < length; i++) {
        Character character = something.charAt(i);
        if (Character.isDigit(character)) {
            result += character;
        }
    }
    System.out.println("result is: " + result);