在Java中从字符串(也包含字母)获取int
如何从字符串(如在Java中从字符串(也包含字母)获取int,java,integer,Java,Integer,如何从字符串(如423e)中获取int值,即包含数字但也可能包含字母的字符串 Integer.parseInt()失败,因为字符串必须是一个完整的数字。除非您讨论的是基数为16的数字(有一种方法可以将其解析为十六进制),否则您需要显式分离出感兴趣的部分,然后将其转换。毕竟,在Base10中类似23e44e11d的东西的语义是什么 如果你确信你只有一个数字,正则表达式可以做到这一点。Java有一个内置的正则表达式解析器 另一方面,如果您的目标是连接所有数字并转储字母,那么这是相当简单的,方法是逐字
423e
)中获取int值,即包含数字但也可能包含字母的字符串
Integer.parseInt()
失败,因为字符串必须是一个完整的数字。除非您讨论的是基数为16的数字(有一种方法可以将其解析为十六进制),否则您需要显式分离出感兴趣的部分,然后将其转换。毕竟,在Base10中类似23e44e11d的东西的语义是什么
如果你确信你只有一个数字,正则表达式可以做到这一点。Java有一个内置的正则表达式解析器
另一方面,如果您的目标是连接所有数字并转储字母,那么这是相当简单的,方法是逐字符迭代,使用StringBuilder构建一个字符串,然后解析该字符串。也许可以获得字符串的大小并循环每个字符,并对每个字符调用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);
String something=“423e”;
int length=something.length();
字符串结果=”;
for(int i=0;i
将所有非数字替换为空白:剩余字符串仅包含数字
Integer.parseInt(s.replaceAll("[\\D]", ""))
这也将删除数字之间的非数字,因此“x1x1x”
变为11
如果需要确认字符串由可能跟在字母后面的一系列数字(至少一个)组成,请使用以下方法:
s.matches("[\\d]+[A-Za-z]?")
NumberFormat类将只解析字符串,直到它到达不可解析的字符:
((Number)NumberFormat.getInstance().parse("123e")).intValue()
因此将返回123。只需遍历字符串,像往常一样建立一个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');
}
int res=0;
对于(int i=0;i'9')继续;
res=res*10+(c-‘0’);
}
您也可以使用扫描仪:
Scanner s = new Scanner(MyString);
s.nextInt();
我对java一无所知,我知道你可以用正则表达式来实现这一点。首先去掉所有不是0-9的字符,然后解析剩下的所有字符。这就是您要寻找的类型吗?算法是正确的,但您应该使用StringBuilder附加到result.Agreed。我想一个人在匆忙打字时不可能总是十全十美的。那最好不要这么匆忙。循环中的串联是使用字符串可能做的最糟糕的事情之一。6年后它仍然没有被修复。如果有一个链接就好了……谢谢,我是用regex做的。我想可能有一个内置的方法,最后一行应该是
res=res*10+c-'0'代码>该类假定空格作为标记之间的分隔符,但可以将其更改为任何正则表达式,如新扫描仪(“456e”)。使用分隔符(\\D”).nextInt()
。还有