20

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;

7 Answers 7

32

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:

  • Check for null, and/or...
  • ...Wrap the NumberFormatExtension exception
Sign up to request clarification or add additional context in comments.

Comments

23

Well, 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.

Comments

9

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+",""))

4 Comments

I might be a novice but why is this not upvoted at all, such a neat simple trick. Update, just realized why, it fails for negative values!
This tricky way only work for unsigned integer (positive number)
Correct. For general case I would use some third-party *Utils library (see other answers)
Blindly replacing non-digits can lead to unexpected behavior in the eyes of the user.
4

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);

Comments

0

Yes. (Validate your inputs before making assumptions about what are in them. :-)

+1 for already finding Apache's common-lang w/ StringUtils.

Comments

0

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.

Comments

0

I don't know why was I searching for this but here's the easy way:

int test=str.isEmpty()?0:Integer.parseInt(str);

1 Comment

This will throw an NPE if str is null.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.