關于反轉這個問題,在晚上查了些資料,有很多非常不錯的思想,要熟練的掌握這些思想,現在把這些總結如下:
字元串反轉:
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 |