gpt4 book ai didi

java - 测试 char 是否为 int 时出现 ArrayIndexOutOfBounds

转载 作者:行者123 更新时间:2023-12-02 07:19:48 25 4
gpt4 key购买 nike

好吧,伙计们,我正在努力掌握 Java 的基本知识,我想我应该做一些比平常更复杂的事情。我在这个方法中所做的是尝试首先检查第一个字符是否可以是 int,如果是,我想看看该数字将在输入中走多远(所以如果用户输入 455+60,我我想要拉出 455 并停在 +) 处。

出于某种原因,如果输入是500t,它会正常工作。但如果索引在数字之后结束(假设输入只是 500),则会出现问题。我认为 for 循环由于某种原因继续运行。有人能告诉我我哪里搞砸了吗?我添加了一个 if 语句来看看是否可以阻止它,但无济于事。

public void init(){
int chars = 0;
/*
* Input fancy intro here.
*/
clearArray();
String uInput = getInput();
rawInput=uInput.toCharArray();
cleanArray(rawInput);
try{Integer.parseInt(Character.toString(rawInput[0]));
boolean isNum = true;
for(int i=0;isNum==true;i++){
if(i != rawInput.length){
try{Integer.parseInt(Character.toString(rawInput[i]));}
catch (NumberFormatException s){
isNum = false;
chars = i;
System.out.println("The number has: "+chars+" characters.");
}
}
}
}
catch (NumberFormatException s){
System.out.println("What is this madness?");

}



}

最佳答案

在这里,您可以避免询问rawInput[rawInput.length]:

if(i != rawInput.length)

...但是您确实继续进行下一次迭代。

有什么理由你不能这样做:

for (int i = 0; i < rawInput.length && isNum; i++)

?我还建议使用 Character.isDigit或自定义检查,而不是将每个字符转换为字符串,然后解析它并捕获异常。

请注意,对于非 ASCII 数字,Character.isDigit 将会返回 true,这可能是您不希望看到的。您很可能只想简单检查一下:

char c = rawInput[i];
if (c < '0' || c > '9') {
isNum = false;
}

另请注意,正则表达式可能是更好的解决方案......

哦,如果你有一个空字符串,那么此时它会被视为一个数字......

关于java - 测试 char 是否为 int 时出现 ArrayIndexOutOfBounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14402756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com