首页 > 代码库 > 关于字符串反转和数组反转的问题

关于字符串反转和数组反转的问题

关于反转这个问题,在晚上查了些资料,有很多非常不错的思想,要熟练的掌握这些思想,现在把这些总结如下:

字符串反转:

 1 import java.util.Stack; 2  3 public class StringInverse { 4     public static void main(String[] args) { 5         System.out.println(reverse7("abcde")); 6     } 7     //方式一 8     public static String reverse1(String s) { 9         int length = s.length();10         if (length <= 1)11             return s;12         String left = s.substring(0, length / 2);//ab13         String right = s.substring(length / 2, length);//de14         return reverse1(right) + reverse1(left);//此处用到了递归!!!15     }16     //方式二17     public static String reverse2(String s) {18         int length = s.length();19         String reverse = "";//空字符串20         for (int i = 0; i < length; i++)21             reverse = s.charAt(i) + reverse;//reverse放在后面22         //charAt()返回的是一个char23         return reverse;24     }25     //方式三26     public static String reverse3(String s) {27         char[] array = s.toCharArray();28         String reverse = "";//空字符串29         for (int i = array.length - 1; i >= 0; i--)30             reverse += array[i];31         //reverse放在前面32         return reverse;33     }34     //方式四35     public static String reverse4(String s) {36         //JDK提供的API37         return new StringBuffer(s).reverse().toString();38     }39     //方式五40     public static String reverse5(String str) {41         //把字符串编程一个字符数组,利用数组的下标来更换字符的位置.42         char[] s = str.toCharArray();43         //返回值是char[] toCharArray()将此字符串转换为一个新的字符数组。44         int n = s.length - 1;45         int halfLength = n / 2;46         for (int i = 0; i <= halfLength; i++) {47             char temp = s[i];48             s[i] = s[n - i];49             s[n - i] = temp;50         }51         //利用String(char[])这个构造方法.52         return new String(s);53     }54     //方式六55     public static String reverse6(String s) {56         char[] str = s.toCharArray();57         int begin = 0;58         int end = s.length() - 1;59         while (begin < end) {60             //同一个数字或者字符串等异或两次还是这个对象.下边的操作就是对str[begin]和str[end]调换位置.61             str[begin] = (char) (str[begin] ^ str[end]);62             str[end] = (char) (str[begin] ^ str[end]);63             str[begin] = (char) (str[end] ^ str[begin]);64             begin++;65             end--;66         }67         return new String(str);68     }69     //方式七70     public static String reverse7(String s) {71         char[] str = s.toCharArray();72         Stack<Character> stack = new Stack<Character>();73         for (int i = 0; i < str.length; i++)74             stack.push(str[i]);75         String reversed = "";76         for (int i = 0; i < str.length; i++)77             reversed += stack.pop();78         //pop()移除堆栈顶部的对象,并作为此函数的值返回该对象。79         return reversed;80     }81 }

数组的反转(我就找到一个比较经典的):

高大上的数组转换位置.....

 1 import java.lang.reflect.Array; 2  3 public class ArrayInverse { 4  5     public static void main(String[] args) { 6         int[] myarray = { 1, 2, 3 }; 7         int[] newarray = invertArray(myarray); 8  9         for (int i = 0; i < newarray.length; i++) {10             System.out.print(newarray[i] + " ");11         }12     }13 14     /**15      * 反转数组16      * 17      */18     public static <T> T invertArray(T array) {19         int len = Array.getLength(array);20         // 获取泛型的类型(既数组的类型)21         Class<?> classz = array.getClass().getComponentType();22         // newInstance(Class<?> componentType,int length)23         // 创建一个具有指定的组件类型和长度的新数组。调用此方法等效于创建如下数组:24         Object dest = Array.newInstance(classz, len);25 26         // arraycopy()从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。27         System.arraycopy(array, 0, dest, 0, len);28 29         Object temp;30 31         for (int i = 0; i < (len / 2); i++) {32             temp = Array.get(dest, i);// get(Object array, int index)返回指定数组对象中索引组件的值。33             Array.set(dest, i, Array.get(dest, len - i - 1));34             Array.set(dest, len - i - 1, temp);35         }36         return (T) dest;37     }38 }

 

关于字符串反转和数组反转的问题