反转字符串的7种方法(Java)

时间:2025-04-04 14:59:32
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); } }