1、Java函数实现字符串逆序输出的几种方法
(1)使用StringBuffer类中的reverse()方法将字符串逆序;
(2)利用String类中的toCharArray()转换成字符数组,然后逆序输出数组;
(3)利用String类中的toCharArray()转换成字符数组,将数组二分并交换两边的字符;
(4)遍历字符串,从头部开始逐个正序放入字符串中;
(5)利用栈的先入后出的特性实现字符串的逆序;
(6)通过递归实现字符串的逆序。
2、具体代码
package com.peter.algorithm.other;
import org.junit.Test;
import java.util.Stack;
public class StringReverse {
@Test
public void test() {
String originStr = ".trats ot detnaw uoy yhw nosaer eno taht fo kniht pu evig ot tuoba era uoy nehW";
//String originStr = "。始开要想么什为你想想,候时的弃放要想你当";
System.out.println(reverseByStringBuffer(originStr));
System.out.println(reverseByCharArray(originStr));
System.out.println(reverseBySwapChar(originStr));
System.out.println(reverseByInsertFront(originStr));
System.out.println(reverseByStack(originStr));
System.out.println(reverseByRecursion(originStr));
}
public static String reverseByStringBuffer(String originStr) {
if (originStr == null || originStr.isEmpty()) {
throw new IllegalArgumentException("Illegal string!");
}
StringBuffer stringBuffer = new StringBuffer(originStr);
return stringBuffer.reverse().toString();
}
public static String reverseByCharArray(String originStr) {
if (originStr == null || originStr.isEmpty()) {
throw new IllegalArgumentException("Illegal string!");
}
StringBuffer stringBuffer = new StringBuffer();
char[] originChar = originStr.toCharArray();
for (int i = originChar.length - 1; i >= 0; i--) {
stringBuffer.append(originChar[i]);
}
return stringBuffer.toString();
}
public static String reverseBySwapChar(String originStr) {
if (originStr == null || originStr.isEmpty()) {
throw new IllegalArgumentException("Illegal string!");
}
char[] originChar = originStr.toCharArray();
int len = originChar.length;
int middle = len >>> 1;
for (int i = 0; i < middle; i++) {
char temp = originChar[i];
originChar[i] = originChar[len - i - 1];
originChar[len - i - 1] = temp;
}
return new String(originChar);
}
public static String reverseByInsertFront(String originStr) {
if (originStr == null || originStr.isEmpty()) {
throw new IllegalArgumentException("Illegal string!");
}
StringBuffer stringBuffer = new StringBuffer();
int len = originStr.length();
for (int i = 0; i < len; i++) {
stringBuffer.insert(0, originStr.charAt(i));
}
return stringBuffer.toString();
}
public static String reverseByStack(String originStr) {
if (originStr == null || originStr.isEmpty()) {
throw new IllegalArgumentException("Illegal string!");
}
StringBuffer stringBuffer = new StringBuffer();
Stack<Character> stack = new Stack<>();
int len = originStr.length();
//入栈
for (int i = 0; i < len; i++) {
stack.push(originStr.charAt(i));
}
//出栈
for (int i = 0; i < len; i++) {
stringBuffer.append(stack.pop());
}
return stringBuffer.toString();
}
public static String reverseByRecursion(String originStr) {
if (originStr == null || originStr.isEmpty()) {
throw new IllegalArgumentException("Illegal string!");
}
if (originStr.length() == 1) {
return originStr;
}
int len = originStr.length();
return reverseByRecursion(originStr.substring(1, len)) + originStr.charAt(0);
}
}
3、测试结果
origin string | target string |
---|---|
.trats ot detnaw uoy yhw nosaer eno taht fo kniht pu evig ot tuoba era uoy nehW | When you are about to give up think of that one reason why you wanted to start. |
。始开要想么什为你想想,候时的弃放要想你当 | 当你想要放弃的时候,想想你为什么想要开始。 |