Seperti yang telah ditunjukkan orang lain, cara yang disukai adalah menggunakan:
new StringBuilder(hi).reverse().toString()
Tetapi jika Anda ingin menerapkan ini sendiri, saya takut bahwa sisa tanggapan memiliki kekurangan.
Alasannya adalah yang String
mewakili daftar titik Unicode , dikodekan dalam char[]
array sesuai dengan pengkodean panjang variabel: UTF-16 .
Ini berarti beberapa titik kode menggunakan elemen tunggal array (satu unit kode) tetapi yang lain menggunakan dua di antaranya, sehingga mungkin ada pasangan karakter yang harus diperlakukan sebagai satu unit (pengganti "tinggi" dan "rendah" berurutan) .
public static String reverseString(String s) {
char[] chars = new char[s.length()];
boolean twoCharCodepoint = false;
for (int i = 0; i < s.length(); i++) {
chars[s.length() - 1 - i] = s.charAt(i);
if (twoCharCodepoint) {
swap(chars, s.length() - 1 - i, s.length() - i);
}
twoCharCodepoint = !Character.isBmpCodePoint(s.codePointAt(i));
}
return new String(chars);
}
private static void swap(char[] array, int i, int j) {
char temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("C:/temp/reverse-string.txt");
StringBuilder sb = new StringBuilder("Linear B Syllable B008 A: ");
sb.appendCodePoint(65536); //http://unicode-table.com/es/#10000
sb.append(".");
fos.write(sb.toString().getBytes("UTF-16"));
fos.write("\n".getBytes("UTF-16"));
fos.write(reverseString(sb.toString()).getBytes("UTF-16"));
}