簡體   English   中英

Java:線程“ main”中的異常java.lang.StringIndexOutOfBoundsException:字符串索引超出范圍:

[英]Java : Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range:

是一個初學者,誰能幫助我弄清楚我們的情況。 我正在嘗試讀取字符串,並將字符串的每個字符存儲在數組中。

import java.util.Scanner;

public class CoreMainDigitExtractor {

    static Scanner inputString = new Scanner(System.in);

    public static void main(String[] args) {


        digitExtractor ExtracDig = new digitExtractor();

        System.out.println("Enter a String to Extract and Display Vertically in Reverse Order : ");
        String input1 = inputString.nextLine();
        System.out.println("User input String is : " + input1);
        System.out.println("Calling Method 'OrderByMaths' in Object 'ExtracDig' of Class 'digitExtractor', with User Input String....'"+input1+"'");    
        ExtracDig.OrderbyMaths(input1);

    }

}




public class digitExtractor {

    int tNumber;

    public digitExtractor() {
        // TODO Auto-generated constructor stub
    }

    public void OrderbyMaths(String numberSequence) {
        System.out.println("OrderbyMatch : Inside Method 'OrderbyMaths'....");
        System.out.println("OrderbyMatch : Initializing a variable of type int 'tNumberLength'.");
        int tNumberLength = numberSequence.length();
        System.out.println("OrderbyMatch : Variable Initialized of type int 'tNumberLength'.");
        System.out.println("OrderbyMaths : Capture length of User Input String into Variable 'tNumberLength'.");
        System.out.println("OrderbyMaths : The length of User Input String in Variable 'tNumberLength' is '" + tNumberLength + "'.");
        System.out.println("OrderbyMatch : Initializing an Array of type int 'arrNumberSequence'; with Size of Array equal to 'tNumberLength'.");
        char arrNumberSequence[] = new char[tNumberLength];
        System.out.println("OrderbyMatch : Initialized Array 'arrNumberSequence' with Size '" + arrNumberSequence.length + "'");
        int i = 0;

        while (i <= arrNumberSequence.length){
            arrNumberSequence[i] = numberSequence.charAt(i);
            System.out.println("OrderbyMatch : Value in Array Slot '"+arrNumberSequence[i]+"' is '"+ numberSequence.charAt(i)+"'");
            i++;    

        }

    }   

}

輸出值

輸入一個字符串以反向提取並垂直顯示:

哈克

用戶輸入的字符串是:HACK

使用用戶輸入字符串....“ HACK”調用類“ digitExtractor”的對象“ ExtracDig”中的方法“ OrderByMaths”

OrderbyMatch:內部方法'OrderbyMaths'....

OrderbyMatch:初始化一個類型為int'tNumberLength'的變量。

OrderbyMatch:變量,類型為int'tNumberLength'。

OrderbyMaths:將用戶輸入字符串的長度捕獲到變量'tNumberLength'中。

OrderbyMaths:變量“ tNumberLength”中用戶輸入字符串的長度為“ 4”。

OrderbyMatch:初始化一個類型為'arrNumberSequence'的數組; Array的大小等於'tNumberLength'。

OrderbyMatch:大小為“ 4”的初始化數組“ arrNumberSequence”

OrderbyMatch:陣列插槽“ H”中的值為“ H”

OrderbyMatch:陣列插槽“ A”中的值為“ A”

OrderbyMatch:陣列插槽“ C”中的值為“ C”

OrderbyMatch:陣列插槽“ K”中的值為“ K”

線程“主”中的異常java.lang.StringIndexOutOfBoundsException:字符串索引超出范圍:java.lang.String.charAt(未知源)為4,digitExtractor.OrderbyMaths(digitExtractor.java:23)在CoreMainDigitExtractor.main(CoreMainDigitExtractor.java) :16)

問候

Dwenish

對於字符串HACK我們的.length4 Java中的索引從0開始,所以我們有

['H','A','C','K']
  ^   ^   ^   ^ 
  0   1   2   3

因此,可以說在您的while循環中i=4

while (i <= arrNumberSequence.length)
while (is 4 less than or equal to 4? yes 4==4 so continue with the loop) 

當我們嘗試訪問charAt(4)它不是字符串的有效索引

['H','A','C','K']
  ^   ^   ^   ^   ^
  0   1   2   3   4

所以我們得到了例外

java.lang.StringIndexOutOfBoundsException: String index out of range: 4

問題在這里:

while (i <= arrNumberSequence.length){

字符串“ HACK”的長度為4。索引為0、1、2、3。 您的循環從0迭代到4(包括4),因此在上一次迭代中,它調用arrNumberSequence [4],該索引不在索引內。

只需刪除'=',就可以了:

while (i < arrNumberSequence.length)

更改此:

 while (i <= arrNumberSequence.length)

到這個:

 while (i < arrNumberSequence.length)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM