如何从423e
之类的字符串中获取int值 - 即包含数字但也可能是字母的字符串?
Integer.parseInt()
失败,因为字符串必须完全是数字。
答案 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);