您的位置:首页 > 编程语言 > Java开发

字符串反转的 Java 方法

2016-11-03 00:00 441 查看
package cglib;

import java.util.Stack;

public class Reverse {

public static void main(String[] args) {
// TODO Auto-generated method stub

System.out.println("数组首位调换方法一输出:"+reverse1("傻瓜大傻瓜"));
System.out.println("递归方法二输出:"+reverse2("123456"));
System.out.println("StringBuffer方法三输出:"+reverse3("白痴大白痴"));
System.out.println("栈方法四输出:"+reverse4("帅极了"));
System.out.println("使用StringBuffer的append方法五输出:"+reverse5("大师哥"));
System.out.println("StringBuffer使用StringBuffer的setCharAt方法六输出:"+reverse6("李易峰"));
}

// 方法一:直接使用数组首位调换,放到另外的数组中
public static String reverse1(String str){
if(str==null||str.length()<2){
return str;
}

char[] arry=str.toCharArray();
char[] reverseArray=new char[arry.length];
for(int i=0;i<arry.length;i++){
reverseArray[arry.length-i-1]=arry[i];
}
return new String(reverseArray);

}
// 巧妙使用递归的方式,把字符串的第一位挪到最后。配合
//reverseString(s.substring(1))递归调用,每次都把字符串的第一位挪到最后。直到递归的参数只剩下一个字符为止。

public static String reverse2(String str) {
//System.out.println(str);
//System.out.println(str.substring(1));
//System.out.println(str.charAt(0));
if (str == null || str.length() <2) {
return str;
}
return reverse2(str.substring(1))+str.charAt(0);
}
// 借助其他包含反转方法的类
public static String reverse3(String str) {
if (str == null || str.length() <2) {
return str;
}
StringBuffer array = new StringBuffer(str) ;
System.out.println("方法三:"+array);
array=array.reverse();
return array.toString();
}

public static String reverse4(String str) {
if (str == null || str.length() <2) {
return str;
}
String result="";
char[] array=str.toCharArray();
Stack<Character> stack = new Stack<>();

for(char a:array){
stack.push(a);
}
int length = stack.size(); //注意这个地方必须要先把length暂存起来,因为在遍历的过程中,pop()堆的时候,会改变堆的大小,//注意这个地方必须要先把length暂存起来,因为在遍历的过程中,pop()堆的时候,会改变堆的大小。stack.size()会变化,不能作为条件 。或者用str.length作为条件
for(int i=0;i<length;i++){
result+=stack.pop();
}

return result;
}
public static String reverse5(String str) {
if (str == null || str.length() <2) {
return str;
}
StringBuffer array = new StringBuffer(str.length()) ;
//System.out.println("方法五:"+array);
for(int i=str.length()-1;i>=0;i--){
//System.out.println("i="+i);
//System.out.println("str.charAt(i):"+str.charAt(i));
array.append(str.charAt(i));
//System.out.println("array:"+array);
}

return array.toString();
}
public static String reverse6(String str) {
if (str == null || str.length() <2) {
return str;
}
StringBuffer array = new StringBuffer(str) ;

for (int i = 0; i < (str.length() / 2); i++) {
int swapIndex = str.length() - 1 - i;
System.out.println("swapIndex:"+swapIndex);
char swap = array.charAt(swapIndex);
System.out.println("swap:"+swap);
array.setCharAt(swapIndex, array.charAt(i));
System.out.println("array:"+array);
System.out.println("i:"+i);
array.setCharAt(i, swap);
System.out.println("array="+array);
}

return array.toString();
}
}

输出:

数组首位调换方法一输出:瓜傻大瓜傻
递归方法二输出:654321
方法三:白痴大白痴
StringBuffer方法三输出:痴白大痴白
栈方法四输出:了极帅
使用StringBuffer的append方法五输出:哥师大
swapIndex:2
swap:峰
array:李易李
i:0
array=峰易李
StringBuffer使用StringBuffer的setCharAt方法六输出:峰易李
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: