java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:(再次)
我已经阅读了许多类似的文章,但在我的书中,我似乎不知道如何将答案应用到我的代码中。对不起 运行下面的代码时,我得到了错误: java.lang.StringIndexOutOfBoundsException:字符串索引超出范围: 计划的结果是好的。我正在从扫描仪输入的字符串中获取所有大写字母。但是错误信息有点碍事 非常感谢您的帮助!提前谢谢java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:(再次),java,Java,我已经阅读了许多类似的文章,但在我的书中,我似乎不知道如何将答案应用到我的代码中。对不起 运行下面的代码时,我得到了错误: java.lang.StringIndexOutOfBoundsException:字符串索引超出范围: 计划的结果是好的。我正在从扫描仪输入的字符串中获取所有大写字母。但是错误信息有点碍事 非常感谢您的帮助!提前谢谢 import java.util.Scanner; public class TestClass { public static void ma
import java.util.Scanner;
public class TestClass {
public static void main(String[] args) {
Scanner in3 = new Scanner(System.in);
System.out.print("Enter a senctence with capitals: ");
String inputString = in3.nextLine();
int stringLength = String.valueOf(inputString).length();
int i = 0;
while (i <= stringLength)
{
int subsStart = i;
int subsEind = i + 1;
String stringToCheck = inputString.substring(subsStart, subsEind);
char letterToCheck = stringToCheck.charAt(0);
if (Character.isUpperCase(letterToCheck))
{
System.out.println(letterToCheck);
}
i++;
}
in3.close();
}
}
import java.util.Scanner;
公共类TestClass{
公共静态void main(字符串[]args){
扫描仪in3=新扫描仪(System.in);
System.out.print(“输入大写的字符:”);
String inputString=in3.nextLine();
int stringLength=String.valueOf(inputString.length();
int i=0;
while(我while(i您有几个地方需要索引字符串的末尾。首先,您的主循环不应该通过stringLength
,因为字符串的长度是对字符串的非法索引。最多,循环应该通过stringLength-1
,这意味着应该写入循环
while (i < stringLength) // NOT i <= stringLength
然后再进行评估
char letterToCheck = stringToCheck.charAt(0);
这使得假设stringToCheck
不是空字符串。不幸的是,当substart==stringLength
时,该假设失败。因此,您需要在stringLength
之前停止外部循环:
while (i < stringLength - 1)
while(i
但是,由于您一次只对一个字母感兴趣,因此我不会费心提取子字符串。此外,您的代码中有许多冗余变量。我将这样编写:
public static void main(String[] args) {
Scanner in3 = new Scanner(System.in);
System.out.print("Enter a sentence with capitals: ");
String inputString = in3.nextLine();
int stringLength = inputString.length();
for (int i = 0; i < stringLength; i++)
{
char letterToCheck = inputString.charAt(i);
if (Character.isUpperCase(letterToCheck))
{
System.out.println(letterToCheck);
}
}
// in3.close(); // not really needed for System.in
}
publicstaticvoidmain(字符串[]args){
扫描仪in3=新扫描仪(System.in);
System.out.print(“输入一个大写的句子:”);
String inputString=in3.nextLine();
int stringLength=inputString.length();
对于(int i=0;i
最后两次迭代将失败
String stringToCheck = inputString.substring(subsStart, subsEind);
尝试读取索引stringLength
&stringLength+1
,但只有stringLength-1
当i==stringLength时会发生什么?子字符串如何工作?如果i==stringLength-1
,会发生什么?为什么需要String.valueOf
已经是字符串的东西?您还应该看一看。它比while
更适合你的情况。感谢所有的反馈。刚刚开始使用Java,我很感谢你的评论,并将检查它们!事实上,while(我
while (i < stringLength - 1)
public static void main(String[] args) {
Scanner in3 = new Scanner(System.in);
System.out.print("Enter a sentence with capitals: ");
String inputString = in3.nextLine();
int stringLength = inputString.length();
for (int i = 0; i < stringLength; i++)
{
char letterToCheck = inputString.charAt(i);
if (Character.isUpperCase(letterToCheck))
{
System.out.println(letterToCheck);
}
}
// in3.close(); // not really needed for System.in
}
String stringToCheck = inputString.substring(subsStart, subsEind);