Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中从字符串(也包含字母)获取int_Java_Integer - Fatal编程技术网

在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()
。还有