kakakakakku blog

Weekly Tech Blog: Keep on Learning!

java.lang.AbstractStringBuilder#reverse() の実装を読んでみた

Javaで文字列を反転させる java.lang.AbstractStringBuilder#reverse() の実装を読んでみた.実際にはサロゲートペアを取り扱うコードも入っているが,そこを取り除けば,かなりシンプルな実装になっている.

String文字列をchar型配列に変換して,後は文字列の中央文字から両端のセットを入れ替えてるだけ.ただ,文字数が偶数の場合は中央文字がないので全てセットで入れ替えられるが,奇数の場合は中央文字は位置が変わらないため,中央文字は操作せず,その左右のセットから入れ替えていく必要があるため,for文の開始値で文字数-2の値に対して1ビット右に論理シフトしている.

単純に反転させようとすると,char型配列をもう1つ用意して逆から埋めていくようなロジックを考えてしまうけど,文字列が大きければ大きいほどコストが掛かってしまうので,java.lang.AbstractStringBuilder#reverse() の実装の方が良いね.

AbstractStringBuilder.java - jdk-java - jdk all versions online - Google Project Hosting

public class StringReverse {

	public static void main(String[] args) {

		String str = "abcdefg";
		int count = str.length();
		char[] value = str.toCharArray();

		// java.lang.AbstractStringBuilder#reverse() から抜粋 Start

		int n = count - 1;
		for (int j = (n - 1) >> 1; j >= 0; --j) {
			char temp = value[j];
			char temp2 = value[n - j];
			value[j] = temp2;
			value[n - j] = temp;
		}

		// java.lang.AbstractStringBuilder#reverse() から抜粋 End

		System.out.println(str + " -> " + String.valueOf(value));

	}
}