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

我怎样才能得到一个string,如423e的int值 – 即包含一个数字,也可能是一个字母的string?

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

除非你正在谈论基数为16的数字(对于这个数字有一个parsing为hex的方法),否则你需要明确地分离出你感兴趣的部分,然后将其转换。 毕竟,基数10中的23e44e11d这样的语义是什么?

正则expression式可以做到这一点,如果你确信你只有一个数字。 Java有一个内置的正则expression式parsing器。

另一方面,如果您的目标是连接所有数字并转储alpha,那么通过逐个字符地迭代来构build带有StringBuilder的string,然后parsing该string就相当简单了。

将所有非数字replace为空白:剩余的string只包含数字。

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

这也将删除非数字之间的数字,所以"x1x1x"成为11

如果您需要确认该string是由一个数字序列(至less一个)可能跟一个字母组成的,则使用以下命令:

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

NumberFormat类只会parsingstring,直到达到不可parsing的字符:

 ((Number)NumberFormat.getInstance().parse("123e")).intValue() 

将因此返回123。

您也可以使用扫描仪:

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

也许获得string的大小,并循环每个字符,并调用每个字符的isDigit()。 如果是数字,则将其添加到只在收集数字之前调用Integer.parseInt()的string。

就像是:

  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); 

只要通过string,像往常一样build立一个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'); }