![](/img/trans.png)
[英]Error after compiling Java project : Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 0
[英]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
我們的.length
為4
。 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.