从Java中的字符串中获取int也包含字母

问题描述:

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

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

+0

不知道有关Java的东西,我知道你可以用正则表达式做到这一点。首先去掉所有不是0-9的字符,然后解析剩下的任何字符。这就是你要找的东西吗? – 2010-02-26 00:53:00

除非你在谈论基数为16的数字(其中有一种解析方法是十六进制),你需要明确地分离出你感兴趣的部分,然后将其转换。毕竟,基数10中类似23e44e11d的语义是什么?

如果您确定只有一个数字,则正则表达式可以做到这一点。 Java有一个内置的正则表达式解析器。

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

+0

谢谢,我使用正则表达式。我认为可能有某种内置方法。 – DisgruntledGoat 2010-02-26 15:05:32

也许获得字符串的大小并循环遍历每个字符并在每个字符上调用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); 
+3

该算法是正确的,但您应该使用StringBuilder追加结果。 – 2010-02-26 01:12:21

+3

同意。我想在急速输入时不能总是完美无缺。 – digiarnie 2010-02-26 01:17:36

+0

最好不要那么草率。一个循环中的连接是你可能用字符串做的最糟糕的事情之一。 6年后它仍然不固定。 – Vlasec 2016-08-19 12:12:58

替换所有非数字的空白:剩下的字符串只包含数字。

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

这也将删除非数字字符其间数字,所以"x1x1x"变得11

如果您需要确认该字符串包含数字序列的(至少一个)可能跟一个字母,然后使用此:

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

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

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

因此将返回123

+0

还有[getIntegerInstance()](https://docs.oracle.com/javase/7 /文档/ API/JAVA /文本/ NumberFormat的。html#getIntegerInstance%28%29) – mlt 2016-04-26 19:10:14

只需经过串,建立一个int像往常一样,但忽略了非数字characte RS:

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

很确定最后一行应该是'res = res * 10 + c - '0';' – benkc 2013-08-21 00:47:35

+0

@benkc:你好像是正确的 – Claudiu 2013-08-21 01:41:29

您还可以使用扫描仪:

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

不起作用??? – 2015-02-03 22:22:18

+1

[Scanner](http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html)类假设空格作为标记之间的分隔符,但可以更改为任何正则表达式像'new Scanner(“456e”)。useDelimiter(“\\ D”)。nextInt()'。 – 2015-03-02 14:38:28