2017-08-03 159 views
0

我需要解析一个字符串用户id到我使用的整数Integer.parseInt(String s)但它返回null/nil,如果那里字符串有/保存非十进制/整数值,在这种情况下,我需要指定默认整数值为0我怎样才能解析字符串为int与默认值?

我试过了,但它(? 0)似乎不工作,我不知道它是否是正确的语法。

String userid = "user001"; 
int int_userid = Integer.parseInt(userid) ? 0; 

如果赋值为空,如何将默认值赋值为整数?

字符串用户ID是作为Web服务函数调用的一部分的参数参数,所以我无法将其数据类型更新为整数。

+4

您已经发明了Java中不存在的语法。如果parseInt不能解析字符串,则会抛出异常。你可以抓住例外来处理这种情况。 – khelwood

+2

“,但它返回空,如果有字符串有非整数值”不,它不。一个int返回方法不能返回null。它引发一个异常。 – Michael

+0

当您运行该程序时,您应该会在eclipse控制台中看到一个异常。 – deepakl

回答

1

您可以使用正则表达式尝试此方法。

public static int parseWithDefault(String s, int default) { 
    return s.matches("-?\\d+") ? Integer.parseInt(s) : default; 
} 
8

这句法不会为Integer.parseInt()工作,因为它会导致NumberFormatException

你可以处理它这样

String userid = "user001"; 
int int_userid; 
try 
{ 
    int_userid = Integer.parseInt(userid); 
} 
catch(NumberFormatException p_ex) 
{ 
    int_userid = 0; 
} 
+0

你从哪里发明了'p_ex'? – xenteros

+1

只需要一个变量名就可以在这里发现 – Lars

+0

这只是NumberFormatException的一个变量。你可以使用它像'p_ex.printStackTrace()' – Yannick

-2
int int_userid; 
try { 
    int_userid = Integer.parseInt(userid); // try to parse the given user id 
} catch (Exception e) { // catch if any exception 
    int_userid = 0; // if exception assign a default value 
} 
+2

看,这是答案之一,但唯一一个甚至没有一个词来解释... – xenteros

+0

但这不应该是投票的理由,反正我会记住这一点。 – deepakl

+1

[解释解答](// meta.stackexchange.com/q/114762)对未来的访问者更有用,并且更有可能获得投票。评论票不计入名誉,所以他们经常被用来表示同意。如果您觉得评论“太唠叨”并且应该被删除,您可以随时将其标记为主持人注意。 – whrrgarbl

0
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; 
} 
5

您可以用这种方式与String::matches这样的:

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

也CA使用-?\d+的正面和负面的价值观:

int int_userid = userid.matches("-?\\d+") ? Integer.parseInt(userid) : 0; 
+3

是不是我downvote,我不是一个正则表达式大师,但它似乎是一个迂回的方式,不会失败的负数? – PeterJ

+0

@PeterJ现在呢? :) –

+2

@YCF_L完美的过度工程:D – xenteros

2

我相信你可以通过下面的m来实现你想要的ethod:

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绝对是要改进的地方。

1

你最有可能使用apache.commons.lang3不已:

NumberUtils.toInt(str, 0); 
1

这可能是有点过度工程,但你可以用番石榴的Ints.tryParse(String)与Java 8的选配是这样的:

int userId = Optional.ofNullable(Ints.tryParse("userid001")).orElse(0) 
相关问题