2016-10-16 13 views
1

javaでは、残りの文字を元の位置に保ちながら文字列内の文字を切り替える最も良い方法は何ですか? 私の実際の関心事は、次のもの以外の範囲外のエラーを扱う方法がある場合です: 「stringExample」の大文字Eで文字rを切り替えたいとしましょう。Javaリストのインデックスが範囲外です

あなたは "ST" + "R" + "INGの" + "E" + "XAMPLE" にチャンクこれを

------------------することができます(i、i + 1) - (i + 1、k) - (k、k + 1)---(k + 1) )

次に切り替える "R" & "E": "ST" + "E" + "INGの" + "R" + "XAMPLE"

----------- (0、i) - (k、k + 1) - (i + 1、k) - (i、i + 1) )---(k + 1)

唯一の問題は、kが最後のインデックスである場合、wriこの例外をキャッチするif文。私が前に提案したこと以外にも、これらの文字を切り替えるより良い方法がありますか?

+0

"r"と "E"は例として選択したランダムな文字です。このメソッドは、2番目の文字が最初の文字の前に来るときに任意の文字を切り替えるものです。 (int k = 0; k user6750519

答えて

1

文字列内の文字を置き換えるだけの場合は、おそらく文字列全体をString.substringを使って再構築することをお勧めします。例:

String swapLetters(String str, int firstIndex, int secondIndex) { 
    if (firstIndex < 0 || firstIndex >= str.length()) { 
     throw new IndexOutOfBoundsException("firstIndex '" + firstIndex + "' is out of bounds."); 
    } else if (secondIndex < 0 || secondIndex >= str.length()) { 
     throw new IndexOutOfBoundsException("secondIndex '" + secondIndex + "' is out of bounds."); 
    } else if (firstIndex >= secondIndex) { 
     throw new IndexOutOfBoundsException("firstIndex isn't before secondIndex"); 
    } 


    StringBuilder newString = new StringBuilder(str.substring(0, firstIndex)); 
    newString.append(str.charAt(secondIndex)).append(str.substring(firstIndex + 1, secondIndex)) 
      .append(str.charAt(firstIndex)).append(str.substring(secondIndex + 1)); 

    return newString.toString(); 
} 

ここで、最後の文字であっても、部分文字列は空の文字列を返しても問題ありません。

System.out.println("stringExample becomes " + swapLetters("stringExample", 2, 12)); //--> stringExample becomes steingExamplr 
System.out.println("stringExample becomes " + swapLetters("stringExample", 2, 6)); //--> stringExample becomes stEingrxample 

あなただけの手紙与えられた各文字の最初のインスタンスを交換したい場合は、例えば、indexOf('r')代わりのcharAt(2)を使用すると思います。

関連する問題