这个问题在这里已有答案:
我需要将字符串用户id解析为整数,因为我使用Integer.parseInt(String s)
但它返回null / nil,如果字符串有/保持非十进制/整数值,那么我需要将默认整数值指定为0
。
我试过这个,但它(? 0)
似乎不起作用,我不知道它是否是正确的语法。
String userid = "user001";
int int_userid = Integer.parseInt(userid) ? 0;
如果存在空赋值,如何将默认值赋给整数?
字符串userid是一个参数参数,作为Web服务函数调用的一部分,因此我无法将其数据类型更新为整数。
您可以使用正则表达式尝试此方法。
public static int parseWithDefault(String s, int defaultVal) {
return s.matches("-?\\d+") ? Integer.parseInt(s) : defaultVal;
}
该语法不适用于Integer.parseInt()
,因为它会产生NumberFormatException
你可以像这样处理它:
String userid = "user001";
int int_userid;
try
{
int_userid = Integer.parseInt(userid);
}
catch(NumberFormatException ex)
{
int_userid = 0;
}
请注意,您的变量名称不符合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;
}
然后你只需使用这种方法,例如:
int myParsedInt = parseToInt("user001", 0);
此调用返回默认值0
,因为无法解析“user001”。
如果从字符串中删除“user”并调用方法...
int myParsedInt = parseToInt("001", 0);
...然后解析将成功并返回1
,因为int不能有前导零!
您最有可能使用apache.commons.lang3:
NumberUtils.toInt(str, 0);
您可以像qzxswpoi一样使用这种方式:
String::matches
您还可以将String userid = "user001";
int int_userid = userid.matches("\\d+") ? Integer.parseInt(userid) : 0;
用于正值和负值:
-?\d+
它可能有点过度工程,但您可以使用Guava的int int_userid = userid.matches("-?\\d+") ? Integer.parseInt(userid) : 0;
和Java 8的Optionals,如下所示:
Ints.tryParse(String)
我相信你可以通过以下方法实现你想要的目标:
int userId = Optional.ofNullable(Ints.tryParse("userid001")).orElse(0)
现在只需分配:
public static int parseIntWithDefault(String s, int default) {
try {
return Integer.parseInt(s);
} catch(NumberFormatException e) {
return default;
}
}
请记住,使用int int_userid = parseIntWithDefault(userId, 0);
应该使用关于格式化代码的Java良好实践。 Java
绝对值得改进。
int_userid
你的意思是这个语法吗?但是因为String userid = "user001";
int int_userid = Integer.parseInt(userid) != null ? Integer.parseInt(userid) : 0);
永远不会是int
你必须改为:
null
String userid = "user001";
int int_userid;
try {
int_userid= Integer.parseInt(userid);
} catch (NumberFormatexception e) {
int_userid = 0;
}