如何使用默认值将String解析为int?

Kru*_*nal 4 java string integer default-value parseint

我需要将字符串用户id解析为我使用的整数Integer.parseInt(String s)但它返回null/nil,如果有字符串有/保持非十进制/整数值,那么我需要将默认整数值指定为0.

我试过这个,但它(? 0)似乎不起作用,我不知道它是否是正确的语法.

String userid = "user001";
int int_userid = Integer.parseInt(userid) ? 0;
Run Code Online (Sandbox Code Playgroud)

如果存在空赋值,如何将默认值赋给整数?

字符串userid是一个参数参数,作为Web服务函数调用的一部分,因此我无法将其数据类型更新为整数.

Yan*_*ick 10

该语法不起作用Integer.parseInt(),因为它会导致aNumberFormatException

你可以像这样处理它:

String userid = "user001";
int int_userid;
try
{
   int_userid = Integer.parseInt(userid);
}
catch(NumberFormatException ex)
{
   int_userid = 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,您的变量名称不符合Java Code Convention


一个更好的解决方案是为此创建一个自己的方法,因为我确信你将不止一次需要它:

public static int parseToInt(String stringToParse, int defaultValue)
{
    int ret;
    try
    {
       ret = Integer.parseInt(stringToParse);
    }
    catch(NumberFormatException ex)
    {
       ret = defaultValue; //Use default value if parsing failed
    }
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

然后你只需使用这个方法,例如:

int myParsedInt = parseToInt("user001", 0);
Run Code Online (Sandbox Code Playgroud)

此调用返回默认值0,因为无法解析"user001".

如果从字符串中删除"user"并调用方法...

int myParsedInt = parseToInt("001", 0);
Run Code Online (Sandbox Code Playgroud)

...然后解析将成功并返回,1因为int不能有前导零!


msf*_*ter 9

您最有可能使用apache.commons.lang3:

NumberUtils.toInt(str, 0);
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的 (2认同)

YCF*_*F_L 6

您可以String::matches像这样使用这种方式:

String userid = "user001";
int int_userid = userid.matches("\\d+") ? Integer.parseInt(userid) : 0;
Run Code Online (Sandbox Code Playgroud)

您还可以使用-?\d+正值和负值:

int int_userid = userid.matches("-?\\d+") ? Integer.parseInt(userid) : 0;
Run Code Online (Sandbox Code Playgroud)

  • 不是我的downvote,我不是一个正则表达的大师,但它似乎是一个迂回的方式,并不会因为负数而失败? (3认同)
  • @YCF_L完美的过度工程:D (2认同)

mgy*_*osi 5

这可能有点工程过度,但是您可以将Guava Ints.tryParse(String)与Java 8的Optionals一起使用,如下所示:

int userId = Optional.ofNullable(Ints.tryParse("userid001")).orElse(0)
Run Code Online (Sandbox Code Playgroud)