反转字符串的7种方法(Java)
import ;
import ;
/**
* seven methods for reversing
*/
public class reverseString {
public static void main(String[] args) {
// TODO Auto-generated method stub
("Please input your string : ");
Scanner sc = new Scanner();
//迭代器
while(()){ //hasNext()检查序列中是否有元素,有则返true。next()获得下一个元素,返回值:元素
String str = (); //Enter键为结束符,返回Enter键前的所有字符(可得到带空格的字符串)。next()对输入有效字符前遇到Tab键、空格键、Enter键等,会被视为结束符
("The reversing string is : "+reverse7(str)); //此处变换函数
}
}
//利用StringBuffer的内置reverse方法进行逆序排序
public static String reverse1(String str){
return new StringBuffer(str).reverse().toString();
}
//从头部开始,正序:通过字符串数组实现从尾部开始esrever顺序逐个进入字符串reverse
public static String reverse2(String str){
int len =str.length();
String reverse = ""; //空串。方便拼接字符串
for(int i = 0; i<len;i++){
reverse = str.charAt(i) + reverse; //charArt(int index) 返回指定索引处的字符。
}
return reverse;
}
//从尾部开始,倒序
public static String reverse3(String str){
char[] arr = str.toCharArray(); //string转换成char数组
String reverse = "";
for(int i=-1;i>=0;i--){
reverse +=arr[i];
}
return reverse;
}
//利用栈:First In Last Out
//java中不用手动销毁
public static String reverse4(String str) {
StringBuffer sb = new StringBuffer();
Stack<Character> s = new Stack<Character>(); //创建只装字符型的stack
for(int i = 0;i<str.length();i++)
(str.charAt(i));
for(int i = 0;i<str.length();i++)
(()); //出栈,()添加到sb的缓冲区末端;.insert(int index,添加的内容)添加到指定位置
return ();
}
//二位进制的右移,利用临时变量进行交换
public static String reverse5(String str) {
StringBuffer sb = new StringBuffer();
for(int i = 0, j = ()-1;i < ()>>>1;i++,j--){ //右移>>
char temp = (i);
(i, (j)); //setCharAt(int index取代的位置, Char ch要替换为的字符串)
(j, temp);
}
return ();
}
//递归
public static String reverse6(String str){
int len = str.length();
if(len <= 1 )
return str;
String left = str.substring(0, len/2);
String right = str.substring(len/2,len);
return reverse6(left) + reverse6(right);
}
//异或^
public static String reverse7(String str){
char[] s = str.toCharArray();
int begin = 0;
int end = str.length()-1;
while(begin < end){
s[begin] = (char)(s[begin] ^ s[end]);
("第一次^ : "+s[begin]+s[end]);
s[end] = (char)(s[begin] ^ s[end]); //s[begin] 被 s[end]异或两次,得到s[begin] 赋值给s[end]
("第二次^ : "+s[begin]+s[end]);
s[begin] = (char)(s[end]^s[begin] );
("第三次^ : "+s[begin]+s[end]); //换位成功
begin++;
end--;
}
return new String(s);
}
}