Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:(再次)_Java - Fatal编程技术网

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:(再次)

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:(再次),java,Java,我已经阅读了许多类似的文章,但在我的书中,我似乎不知道如何将答案应用到我的代码中。对不起 运行下面的代码时,我得到了错误: java.lang.StringIndexOutOfBoundsException:字符串索引超出范围: 计划的结果是好的。我正在从扫描仪输入的字符串中获取所有大写字母。但是错误信息有点碍事 非常感谢您的帮助!提前谢谢 import java.util.Scanner; public class TestClass { public static void ma

我已经阅读了许多类似的文章,但在我的书中,我似乎不知道如何将答案应用到我的代码中。对不起

运行下面的代码时,我得到了错误: java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:

计划的结果是好的。我正在从扫描仪输入的字符串中获取所有大写字母。但是错误信息有点碍事

非常感谢您的帮助!提前谢谢

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);