-1
    String fullWord;
    String firstWord;
    String secondWord;
    String thirdWord;
    String fourthWord;

    int firstPositionOfAsterisk;
    int secondPositionOfAsterisk;
    int thirdPositionOfAsterisk;
    int fullWordCharacters;
    int firstWordCharacters;
    int secondWordCharacters;
    int thirdWordCharacters;
    int fourthWordCharacters;

    char lastLetterFirstWord;


    // I will prompt the user to enter four words seperated by a *
    fullWord = JOptionPane.showInputDialog("Please enter four words: ");

    // I will use the position of the * to make things easier
    firstPositionOfAsterisk = fullWord.indexOf("*");

    firstWord = fullWord.substring(0, firstPositionOfAsterisk);

    secondPositionOfAsterisk = firstWord.indexOf("*");

    secondWord = fullWord.substring(firstPositionOfAsterisk + 1, secondPositionOfAsterisk);

    thirdPositionOfAsterisk = secondWord.indexOf("*");

    thirdWord = fullWord.substring(secondPositionOfAsterisk + 1, thirdPositionOfAsterisk);

    fourthWord = fullWord.substring(thirdPositionOfAsterisk + 1);

    firstWordCharacters = firstWord.length();
    System.out.println(firstWord +" has a length of " + firstWordCharacters + " characters" );


    secondWordCharacters = secondWord.length();
    System.out.println(secondWord +" has length of " + secondWordCharacters + " characters" );

    thirdWordCharacters = thirdWord.length();
    System.out.println(thirdWord +" has length of " + thirdWordCharacters + " characters" );

    fourthWordCharacters = fourthWord.length();
    System.out.println(fourthWord +" has length of " + fourthWordCharacters + " characters" );

    lastLetterFirstWord = firstWord.charAt(firstPositionOfAsterisk - 1);
    System.out.println("The last letter of " + firstWord + "is " + lastLetterFirstWord);

    fullWord = firstWord + secondWord + thirdWord + fourthWord;

    fullWordCharacters = fullWord.length();
    System.out.println(firstWord +", " + secondWord + ", " + thirdWord + ", " + fourthWord + "has length of" + fullWordCharacters);

ユーザーに「*」で区切られた 4 つの単語を入力させようとしています。たとえば、She*will*call*back のような出力が必要です。

彼女は長さ 3 ウィルは長さ 4 コールは長さ 4 バックは長さ 4

* 記号は、3、8、および 13 の位置で見つかりました。

彼女の最後のキャラクターはsです

She、will、call、backの長さは15

しかし、この java.lang.StringIndexOutOfBoundsException エラーが発生し続けます。これを修正するにはどうすればよいですか?

この行はプログラムをクラッシュさせます

secondWord = fullWord.substring(firstPositionOfAsterisk + 1, secondPositionOfAsterisk);

4

2 に答える 2

0
firstWord = fullWord.substring(0, firstPositionOfAsterisk);

上記は、文字列の最初の部分から最初のアスタリスクまでを取得するため、アスタリスクは含まれません。したがって、これは次を返し-1ます:

secondPositionOfAsterisk = firstWord.indexOf("*");

次に、これは失敗します: (-1有効なインデックスではないため)

secondWord = fullWord.substring(firstPositionOfAsterisk + 1, secondPositionOfAsterisk);

私はこう思います:

secondPositionOfAsterisk = firstWord.indexOf("*");

する必要があります

int offset = firstWord.length()+1;
secondPositionOfAsterisk = firstWord.indexOf("*", offset);

またはそのようなもの。

個人的にはString#splitの方が良い選択肢だと思います。

于 2013-02-24T00:40:42.927 に答える
0

シンプル..これを読んで.. String.substring(int, int)

そして、あなたはそれを見るでしょう

throws
   IndexOutOfBoundsException - if the beginIndex is negative, or endIndex is larger than the length of this String object, or beginIndex is larger than endIndex.

重要な部分は、または beginIndex が endIndex より大きい

おそらくあなたsecondPositionOfAsteriskは負の値(-1)を取得しています

于 2013-02-24T00:36:26.520 に答える