由於說,反轉一個String對象是不可能的,因爲Java中的字符串對象是不可變的。
你可以通過使用反射來訪問底層數組來避開這個(見下面),但這不可取。
如果我們採取了一個問題,在char[]
(或任何其他陣列)的工作,相反,它變得容易:
/**
* reverses an array by swapping its elements.
*/
public static void reverse(char[] array) {
reverse(array, 0, array.length);
}
/**
* reverses a section of an array by swapping its elements.
* @param start the start of the section, inclusive
* @param end the end of the section, exclusive
*/
public static void reverse(char[] array, int start, int end) {
for(int i = start, j = end-1; i < j; i++, j--) {
swap(array, i, j);
}
}
/**
* swaps two array elements.
*/
private static void swap(char[] array, int i, int j) {
char help = array[i];
array[i] = array[j];
array[j] = help;
}
到這一點,我們現在也可以欺騙扭轉現有的字符串:
public static void reverse(String s) {
Class<String> sClass = String.class;
char[] array = (char[])sClass.getDeclaredField("value").get(s);
int start = sClass.getDeclaredField("offset").getInt(s);
int len = sClass.getDeclaredField("count").getInt(s);
reverse(array, start, start+len);
}
至於說,這是不可取的,因爲整個虛擬機和標準庫是基於這樣的事實,字符串是不可變的。此外,這裏的字段名稱取自1.6.0_13 Sun實現,其他虛擬機可能具有其他名稱的這些字段,或以另一種方式存儲字符串。
那麼你的問題是什麼? – 2011-05-09 11:48:21
你想實現字符串反向b'coz有一個函數稱爲** String.reverse(); ** – Ankit 2011-05-09 11:49:36
實際上它的StringBuilder.reverse(); – mglauche 2011-05-09 11:51:16