1

文を入力してから2文字を入力し、それらの文字のすべてのインスタンスを切り替えて、切り替えた文を出力するプログラムを作成しようとしています。たとえば、彼らは入力することができます

I like to eat bananas

そして「e」と「a」、そして私のプログラムは印刷します

I lika to aet benenes 

これが私のコードですが、最後に文字列インデックスが行外に出力されます。これを修正する方法はありますか?

System.out.println("Write something awesome.");
String input1 = Keyboard.readString();
System.out.println("Pick a letter from that awesome sentence.");
char letter1 = Keyboard.readChar();
System.out.println("Pick another letter from that awesome sentence.");
char letter2 = Keyboard.readChar();

double let1 = (input1.length());
int let1Next = (int) let1;
double let2 = (input1.length());
int let2Next = (int) let2;

String newUserImput = input1.replace(input1.charAt(let1Next),
        input1.charAt(let2Next));
System.out.println(newUserImput);
4

6 に答える 6

0

これで試してください。

char[] cs = input1.toCharArray();

for (int i = 0; i < cs.length; i++) {
    char c = cs[i];
    if (letter1 == c) {
        cs[i] = letter2;
    } else if (letter2 == c) {
        cs[i] = letter1;
    }
}

String newUserImput = new String(cs);
于 2013-09-04T04:12:18.207 に答える
0

スタック トレースがなければ、例外がこの行にあると推測する必要があります。

String newUserImput = input1.replace(input1.charAt(let1Next),
        input1.charAt(let2Next));

input1.charAt(let1Next) は何に解決されますか?

double let1 = (input1.length());
int let1Next = (int) let1;
double let2 = (input1.length());
int let2Next = (int) let2;

これは本当にあなたが意味するものではありません。

let1Next は、let2Next と同様に、配列の末尾 + 1 を表します。

したがって、ここには 2 つの大きなバグがあります。

  1. 特定の文字のすべての出現箇所をそれ自体に置き換えています。
  2. 選択している文字は、文字列の末尾を超えています。文字列インデックス (String.charAt への入力など) は 0 ベースであるため、0 から (長さ - 1) までの範囲であることに注意してください。input1.length を指定することにより、文字列の最後の文字のStringIndexOutOfBoundsExceptionの文字を要求しているため、 .
于 2013-09-04T01:38:19.963 に答える
0

このメソッドreplaceは、文字列内のすべての文字を置き換えます

だからあなたが欲しいのは

String new1 = input1.replace (letter1, letter2);
String new2 = input1.replace (letter2, letter1);

次に、元の文字列を繰り返し処理して、 と の違いを確認しnew1ますnew2

于 2013-09-04T01:33:10.433 に答える