When I run parseInt:
Integer.parseInt(myString);
it throws:
NumberFormatException: For input string: ""
Does this mean I have do something like this?
if(StringUtils.isNotBlank(myString))
return Integer.parseInt(myString);
else
return 0;
When I run parseInt:
Integer.parseInt(myString);
it throws:
NumberFormatException: For input string: ""
Does this mean I have do something like this?
if(StringUtils.isNotBlank(myString))
return Integer.parseInt(myString);
else
return 0;
Yes, but: Wrap it in a thin method (and eliminate the redundant else
), or use an existing implementation, like Commons Lang's NumberUtils.toInt(str, defaultValue)
:
NumberUtils.toInt(myString, 0);
This method handles null
values and conversion failures.
Writing the same thing on your own is straight-forward:
NumberFormatExtension
exceptionWell, you could use the conditional operator instead:
return StringUtils.isNotBlank(myString) ? Integer.parseInt(myString) : 0;
If you need to do this in multiple places, you'd probably want to put this into a separate method. Note that you should also consider situations where myString
is null, or contains non-numeric text.
If the string can be empty I do it this way:
Integer.parseInt("0" + inputString)
When I'm not sure it contains only digits:
Integer.parseInt(0 + inputString.replaceAll("\\D+",""))
What you have is fine, but as a coding style I prefer to make tests "positive" (isBlank
), rather than "negative" (isNotBlank
), ie
if (StringUtils.isBlank(myString)) {
return 0;
}
return Integer.parseInt(myString); // Note: No need for else when the if returns
or, more succinctly:
return StringUtils.isBlank(myString) ? 0 : Integer.parseInt(myString);
I don't know why was I searching for this but here's the easy way:
int test=str.isEmpty()?0:Integer.parseInt(str);
Yes. (Validate your inputs before making assumptions about what are in them. :-)
+1 for already finding Apache's common-lang w/ StringUtils
.
Integer.parseInt(String)
doesn't accept non-numeric input, including nulls and empty strings.
Either guard against that like you suggested, or catch the NFE.