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

Dis*_*oat 28 java integer

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

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

pol*_*nts 79

将所有非数字替换为空白:剩余的字符串仅包含数字.

Integer.parseInt(s.replaceAll("[\\D]", ""))
Run Code Online (Sandbox Code Playgroud)

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

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

s.matches("[\\d]+[A-Za-z]?")
Run Code Online (Sandbox Code Playgroud)


jar*_*bjo 21

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

((Number)NumberFormat.getInstance().parse("123e")).intValue()
Run Code Online (Sandbox Code Playgroud)

因此将返回123.


Uri*_*Uri 10

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

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

另一方面,如果您的目标是连接所有数字并转储alpha,那么通过逐个字符迭代来构建StringBuilder的字符串,然后解析那个数字,这是相当简单的.


Cla*_*diu 6

只需遍历字符串,像往常一样构建一个 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');
}
Run Code Online (Sandbox Code Playgroud)


Soh*_*shi 6

您也可以使用扫描仪:

Scanner s = new Scanner(MyString);
s.nextInt();
Run Code Online (Sandbox Code Playgroud)