从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'); }