使用substring()时的NumberFormatException

时间:2016-10-05 08:43:52

标签: java substring

我正在尝试使用下面的代码确定字符串是否由连续整数组成。但是,当我运行它时会抛出NumberFormatException。

我已经确定这是因为使用变量i作为substring()的索引值。

这让我感到非常沮丧,因为我无法找到另一种方法。有谁知道为什么substring()不能将变量用作索引值以及我可以做些什么来修复/绕过这个问题? (除了使用巨大的if语句)任何帮助都将非常感谢!谢谢!

public  static void main(String[] args) {

    String x = "12345";
    int counter = 0;

    for (int i = 0; i < 5; i++) {
        if (Integer.parseInt(x.substring(0, 1)) == (Integer.parseInt(x.substring(i, i++))) - i) {
            counter++;
        }  
    }

    if (counter == 5) {
        System.out.println("String is sequential");
    }
}

4 个答案:

答案 0 :(得分:3)

x.substring(i, i++)x.substring(i, i)相同(就传递给substring的值而言),它给出一个空字符串。在空字符串上调用Integer.parseInt会得到NumberFormatException

修复当前循环:

for (int i = 1; i < x.length(); i++) { // note the range change
    // using (i,i+1) instead of gives you a single character
    if (Integer.parseInt(x.substring(0, 1)) == (Integer.parseInt(x.substring(i, i+1)))-i) {
        counter++;
    }  
}

或者,您可以完全避免使用substring。只需遍历String

的字符
for (int i = 1; i < x.length(); i++) {
    if (x.charAt(0) == x.charAt(i) - i) {
        counter++;
    }  
}

答案 1 :(得分:0)

更改您的代码:

if (Integer.parseInt(x.substring(0, 1)) == (Integer.parseInt(x.substring(i, i+1))) - i) {

它应该有用。

答案 2 :(得分:0)

不需要提取子字符串然后将其解析回整数。

Character.getNumericValue(x.charAt(0)) == Character.getNumericValue(x.charAt(i))
如果所有字符都是数字,

也会这样做。如果字符不是数字,则不会抛出NumberFormatException

答案 3 :(得分:0)

     (Integer.parseInt(x.substring(i, i++))) 

这将返回空字符串,你需要使它成为++ i