一、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);
}
}