在慕课网看到的一篇手记,总结的非常好,然后我学习了其中三个方式来实现反转字符串;理解完毕后再自己敲一遍,get到不少技能啊。学无止境,加油!!
这里就直接贴代码,解释都在代码里的注释里了哈。欢迎大家指出不好的地方以促进学习。
1、常规方法:
package zyf;
public class StrReverseWithArray {
/*
* 将字符串转换为char数组
* 遍历循环给char数组赋值*/
public String strReverseWithArray(String string){
if(string==null||string.length()==0) return string;
int len=string.length();//获取字符串长度
char[] arr=string.toCharArray();//创建char数组
//优化,不需循环多次,每次循环时直接给前后位置赋值
for(int i=0;i<len/2;i++){
//从字符串尾端向前遍历并赋值给char数组
//优化:将最后一个字符赋值给arr数组第一个位置
arr[i]=string.charAt(len-1-i);
//优化:将第一个字符赋值给arr数组的最后一个位置
arr[len-1-i]=string.charAt(i);
}
return new String(arr);
}
public static void main(String[] args) {
StrReverseWithArray swa=new StrReverseWithArray();
String str=swa.strReverseWithArray("Hello World!");
System.out.println("###输出结果:"+str);
}
}
2、通过栈的LIFO的方法:
package zyf;
import java.util.Stack;
public class StrReverseWithStack {
/*
* 使用后进先出(LIFO)
* 将字符串转换为char数组
* 将char数组中的字符串依次压入栈中
* 将栈中的字符串一次弹出赋值给char数组*/
public String strReverseWithStack(String str){
if(str==null||str.length()==0) return str;
//创建栈实例
Stack<Character> strStack=new Stack<>();
// 将字符串转换为char数组
char[] arr=str.toCharArray();
//遍历数组并将数组中的字符依次压入栈
for(Character c:arr){
strStack.push(c);
}
int len=str.length();
//将栈中字符取出来赋值给arr
for(int i=0;i<len;i++){
arr[i]=strStack.pop();
}
return new String(arr);
}
public static void main(String[] args) {
StrReverseWithStack swa=new StrReverseWithStack();
String str=swa.strReverseWithStack("Hello World!I Love You So Much!");
System.out.println("###输出结果:"+str);
}
}
3、逆序方法:
package zyf;
public class StrReverseWithReverseLoop {
/*
* 逆序遍历字符串中的字符,并将它依次添加到StringBuilder中*/
public String strReverseWithReverseLoop(String str){
if(str==null||str.length()==0) return str;
StringBuilder sb=new StringBuilder();
//倒序遍历字符串
for(int i=str.length()-1;i>=0;i--){
//将字符串表示形式追加到sb序列
sb.append(str.charAt(i));
}
return sb.toString();
}
public static void main(String[] args) {
StrReverseWithReverseLoop swa=new StrReverseWithReverseLoop();
String str=swa.strReverseWithReverseLoop("Hello World!I Love You So Much!");
System.out.println("###输出结果:"+str);
}
}
8109

被折叠的 条评论
为什么被折叠?



