处理空parseInt的可能性

时间:2016-02-29 08:18:54

标签: java parseint

我有一个String,我成功地在两个特殊字符之间提取文本

(我的文字是数字,示例 - hi%773%what-i get 773)

我使用praseInt将我的数字子串更改为整数(这是成功的)。

我的程序崩溃并烧毁( praseInt numformat exception), 是我的字符串在特殊字符之间不包含数字的时候。

  

my_String =“heyhow $ 98765 $ you”工作,我得到98765并且可以轻松解析

     

     

my_String =“heyhow $$ areyou”运行时错误

     

String str = "heyhow$$areyou";
int startIndex = str.indexOf('$');
int lastIndex = str.indexOf('$', i+1);
String nums = str.substring(startIndex + 1, lastIndex);
int stringNumber = Integer.parseInt(nums); <--runtime error cause of no# to parse

提前感谢您的帮助。如果您有一个想法,不涉及使用最好的循环或条件语句!

4 个答案:

答案 0 :(得分:2)

请改用:

int stringNumber = nums.length() > 0 ? Integer.parseInt(nums) : 0;

如果数字长度不为零,则会解析数字,否则会将stringNumber设置为值0。如果您想要一个空字符串的不同值,请更改它。

如果分隔符之间的字符串不是有效数字,则仍然会失败。如果可能的话:

int stringNumber = 0;
try {
    stringNumber = Integer.parseInt(nums);
}
catch (NumberFormatException nx)
    // depends on how you want to handle invalid numbers
}

答案 1 :(得分:0)

Java三元运算符可以很好地使用如下:

int stringNumber = (!nums.isEmpty() ?Integer.parseInt(nums):0);

答案 2 :(得分:0)

您最好的选择是正则表达式,因此会检测到标记之间的任何错误数据:

private static int extractInt(String input) {
    Matcher m = Pattern.compile("\\$([0-9]+)\\$").matcher(input);
    if (! m.find())
        return 0;
    return Integer.parseInt(m.group(1));
}

请参阅IDEONE了解演示。

答案 3 :(得分:0)

String str = "heywhatsgoing$$youtoday";
int startIndex = str.indexOf('$');
int lastIndex = str.indexOf('$', startIndex+1);
String nums = str.substring(startIndex + 1, lastIndex);
int stringNumber = nums.length() > 0 ? Integer.parseInt(nums) : 0;

这给了我一个值0.

这个答案处理了异常的可能性 AND 给了我一个特定的值,我可以用来处理这个异常。

感谢所有花时间看这个的人。