これは機能します:
for (char c : sourceString.toCharArray())
destString += (char) (c + shiftValue);
System.out.println(destString);
より良い/より高速な (最適化された) 方法はありますか?
これは機能します:
for (char c : sourceString.toCharArray())
destString += (char) (c + shiftValue);
System.out.println(destString);
より良い/より高速な (最適化された) 方法はありますか?
そもそも、文字列連結を繰り返し使用することは避けたいと思います。これは非常によく知られたパフォーマンスの問題です。
この場合、最初に必要な正確な長さはわかっているので、a も必要ありません。a で問題ありませStringBuilder
んchar[]
。
char[] result = new char[srcString.length()];
for (int i = 0; i < result.length; i++) {
result[i] = (char) (srcString.charAt(i) + shiftValue);
}
String destString = new String(result);
(各要素を使用してから上書きするという答えtoCharArray
もいいですが、パフォーマンスの違いは小さいと思います。これが本当にパフォーマンスが重要なコードである場合は、実際のシステムでテストすることをお勧めします。主なポイントはどちらも O(N 2 )ではなく O(N) アプローチです)。
ただし、本当に単にシフトしたいのかどうかを検討する必要があります。このようなほとんどのエクササイズは、シフトよりも回転です。たとえば、AZ で開始すると、AZ で終了する必要があります...シフト値 1 は Z を変更する必要があります。 「Z の後の Unicode 文字」(つまり[
) ではなく、A に。それはあなたの場合の要件ではないかもしれませんが、確かにそれを考慮する必要があります.
短いバージョン。charAt(i)
ループのたびに呼び出す必要はありません。
char[] result = srcString.toCharArray();
for (int i = 0; i < result.length; i++) {
result[i] += shiftValue;
}
String destString = new String(result);
はいあります:
StringBuilder destString = new StringBuilder();
for (char c : srcString.toCharArray()) {
destString.appned((char) (c + shiftValue));
}
System.out.println(destString.toString());