Java實現字串反轉
阿新 • • 發佈:2019-01-03
一、JDK封裝方法實現
java.lang.AbstractStringBuilder的reverse()方法
java.lang.StringBuffer執行緒安全【synchronized實現同步方法】
public static String reverseByJDK(String str) {
if (str == null || str.length() == 0) {
return null;
}
return new StringBuffer(str).reverse().toString();
}
二、陣列實現
常規方法,前後對稱位置交換
public static String reverseByArray(String str) {
if (str == null || str.length() == 0) {
return null;
}
char[] ch = str.toCharArray();// 字串轉換成字元陣列
for (int i = 0; i < ch.length / 2; i++) {
char temp = ch[i];
ch[i] = ch[ch.length - i - 1];
ch[ch.length - i - 1 ] = temp;
}
return new String(ch);
}
三、棧實現
資料結構棧的Java實現類java.util.Stack
棧 last-in-first-out(LIFO)
public static String reverseByStack(String str) {// LIFO
if (str == null || str.length() == 0) {
return null;
}
Stack<Character> stack = new Stack<Character>();
char [] ch = str.toCharArray();// 字串轉換成字元陣列
for (char c : ch) {
stack.push(c);// 每個字元,推進棧
}
for (int i = 0; i < ch.length; i++) {
ch[i] = stack.pop();// 移除這個堆疊的頂部物件
}
return new String(ch);
}
四、逆序遍歷實現
public static String reverseBySort(String str) {
if (str == null || str.length() == 0) {
return null;
}
StringBuffer sb = new StringBuffer();
for (int i = str.length() - 1; i >= 0; i--) {
sb.append(str.charAt(i));// 使用StringBuffer從右往左拼接字元
}
return sb.toString();
}
五、位運算實現
public static String reverseByBit(String str) {
if (str == null || str.length() == 1) {
return null;
}
char[] ch = str.toCharArray();// 字串轉換成字元陣列
int len = str.length();
for (int i = 0; i < len / 2; i++) {
ch[i] ^= ch[len - 1 - i];
ch[len - 1 - i] ^= ch[i];
ch[i] ^= ch[len - 1 - i];
}
return new String(ch);
}
六、使用遞迴實現
遞迴呼叫方法
public static String reverseByRecursive(String str) {
if (str == null || str.length() == 0) {
return null;
}
if (str.length() == 1) {
return str;
} else {
// 從下標為1開始擷取字串,在返回下標為0的字元
return reverseByRecursive(str.substring(1)) + str.charAt(0);
}
}