我正在尝试使用下面的代码确定字符串是否由连续整数组成。但是,当我运行它时会抛出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");
}
}
答案 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