从Java中的字符串中获取int也包含字母
如何从字符串中获取int值,如423e
- 即包含数字但也可能是字母的字符串?从Java中的字符串中获取int也包含字母
Integer.parseInt()
失败,因为字符串必须完全是数字。
除非你在谈论基数为16的数字(其中有一种解析方法是十六进制),你需要明确地分离出你感兴趣的部分,然后将其转换。毕竟,基数10中类似23e44e11d的语义是什么?
如果您确定只有一个数字,则正则表达式可以做到这一点。 Java有一个内置的正则表达式解析器。
另一方面,如果您的目标是连接所有数字并转储alpha,那么通过逐个字符地迭代来构建带有StringBuilder的字符串,然后解析该字符串是非常简单的。
谢谢,我使用正则表达式。我认为可能有某种内置方法。 – 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);
替换所有非数字的空白:剩下的字符串只包含数字。
Integer.parseInt(s.replaceAll("[\\D]", ""))
这也将删除非数字字符其间数字,所以"x1x1x"
变得11
。
如果您需要确认该字符串包含数字序列的(至少一个)可能跟一个字母,然后使用此:
s.matches("[\\d]+[A-Za-z]?")
,直到它到达NumberFormat类只解析字符串非解析的字符:
((Number)NumberFormat.getInstance().parse("123e")).intValue()
因此将返回123
还有[getIntegerInstance()](https://docs.oracle.com/javase/7 /文档/ API/JAVA /文本/ NumberFormat的。html#getIntegerInstance%28%29) – mlt 2016-04-26 19:10:14
您还可以使用扫描仪:
Scanner s = new Scanner(MyString);
s.nextInt();
不起作用??? – 2015-02-03 22:22:18
[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
不知道有关Java的东西,我知道你可以用正则表达式做到这一点。首先去掉所有不是0-9的字符,然后解析剩下的任何字符。这就是你要找的东西吗? – 2010-02-26 00:53:00