关于字符串反转和数组反转的问题详解编程语言

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

字符串反转:

 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 }

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15791.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论