天天看點

關于字元串反轉和數組反轉的問題

關于反轉這個問題,在晚上查了些資料,有很多非常不錯的思想,要熟練的掌握這些思想,現在把這些總結如下:

字元串反轉:

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);//ab
13         String right = s.substring(length / 2, length);//de
14         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()傳回的是一個char
23         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提供的API
37         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 }      
作者:SummerChill