这里提供三种方式实现字符串反转。
- 使用 StringBuilder 或者 StringBuffer 的 reverse() 方法:
public static void main(String[] s) {
Random random = new Random();
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("header--");
//生成原始字符串
for (int i = 0 ;i <10000000;i++){
stringBuffer.append((char)(random.nextInt(10)+97));
}
long begin = System.currentTimeMillis();
//反转
System.out.println(stringBuffer.reverse());
long end = System.currentTimeMillis();
//计算耗时
System.out.println("耗时:"+(end-begin)+"毫秒");
}
耗时:90毫秒
- 通过异或^运算符实现字符串反转
public static void main(String[] s) {
Random random = new Random();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("header--");
//生成原始字符串
for (int i = 0 ;i <10000000;i++){
stringBuilder.append((char)(random.nextInt(10)+97));
}
long begin = System.currentTimeMillis();
//反转并打印
System.out.println(stringReverseDemo2(String.valueOf(stringBuilder)));
long end = System.currentTimeMillis();
//计算耗时
System.out.println("耗时:"+(end-begin)+"毫秒");
}
/**
* 通过^运算符实现反转
*/
private static String stringReverseDemo1(String s) {
char[] str = s.toCharArray();
int begin = 0;
int end = s.length() - 1;
while (begin < end) {
str[begin] = (char) (str[begin] ^ str[end]);
str[end] = (char) (str[begin] ^ str[end]);
str[begin] = (char) (str[end] ^ str[begin]);
begin++;
end--;
}
return String.valueOf(str);
}
耗时:90-110毫秒之间
- 使用递归的方式实现字符串反转
public static void main(String[] s) {
Random random = new Random();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("header--");
//生成原始字符串
for (int i = 0 ;i <10000000;i++){
stringBuilder.append((char)(random.nextInt(10)+97));
}
long begin = System.currentTimeMillis();
//反转并打印
System.out.println(stringReverseDemo2(String.valueOf(stringBuilder)));
long end = System.currentTimeMillis();
//计算耗时
System.out.println("耗时:"+(end-begin)+"毫秒");
}
/**
* 使用递归的方式实现字符串反转
*/
private static String stringReverseDemo2(String s) {
int length = s.length();
if (length <= 1) {
return s;
}
String left = s.substring(0, length / 2);
String right = s.substring(length / 2, length);
return stringReverseDemo2(right) + stringReverseDemo2(left);
}
耗时:1000毫秒