文字列の繰り返し文字を見つけて削除するJavaプログラムを作成しようとしています。ユーザーが「baloon」と入力した場合と同様に、出力は「balon」でなければなりません。私は入力のための文字列変数を使用し、その文字の内容をChar配列にコピーして、各文字を分析できるようにしました。私はArrayIndexOutOfBoundsExceptionを取得します。ここに私のコードこのランタイムエラーを修正するには?
class doubleKiller{
private String inputStr = " ";
private char[] catchStr = new char[inputStr.length()];
private String modifiedStr;
//Accessor method
public void getString(String inputStr)
{
this.inputStr = inputStr;
}
public String killRepeater()
{
//copying string data to char array
this.inputStr.getChars(0 , this.inputStr.length() , catchStr , 0);
//------------------
for(int counter = 0 ; counter < this.inputStr.length() ; counter++)
{
if(catchStr[counter] != catchStr[counter - 1])
{
modifiedStr = modifiedStr + catchStr[counter];
}
}
return modifiedStr;
}
} killRepeater()が呼び出されたときにここで
が出力されます。
java.lang.ArrayIndexOutOfBoundsException: src.length=5 srcPos=0 dst.length=1 dstPos=0 length=4
at java.lang.System.arraycopy(Native Method)
at java.lang.String.getChars(String.java:894)
at doubleKiller.killRepeater(Main.java:23)
at useThings.main(Main.java:49)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.aide.ui.build.java.RunJavaActivity$1.run(SourceFile:108)
at java.lang.Thread.run(Thread.java:862)
おかげで事前
ループの最初の反復では、 'counter'はゼロです。したがって、' catchStr [counter-1] 'はインデックス' -1'にある要素を取得しようとしています。 –
Joe Clayが言ったことの上に、ループが始まったときの状態を考慮して状態を修正して、外れないようにしたい場合があります。 – Chad