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

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

字符串反转:

 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 }
时间: 2024-08-07 08:21:54

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

字符串反转及数组奇偶划分

//将字符串反转,型如:123 456 789 abc ,反转后的结果是 abc 789 456 123 /* #include <iostream> #include <string.h> using namespace std; void Exchange(char *&str) { char *p=str+strlen(str)-1; char *q=str; while(q<p) { char temp=*q; *q=*p; *p=temp; q++; p--

字符串去空格以及反转操作示例

1.字符串去空格 package tan; public class CopyOfStringTest { public static void main(String[] args) { String s = " tan at guigu "; sop(s); String x = MyTrim(s); sop(x); } public static void sop(String str) { System.out.println(str); } // 1.去除字符串两端的空格 p

最大值、最小值、平均值、和、数组反转、数组排序

import java.util.Arrays; import java.util.Scanner; public class ArrayUtils {     //获取数组的最大值     public static void main(String[] args) { //        int[] arr=new int[]{12,4,76,-9,0,44,-87,66};         int num;         Scanner s;                  while

golang 数组反转

我做hackerearth上题目记录,具体的题目描述是这样的: Given the size and the elements of array A, print all the elements in reverse order. Input: First line of input contains, N - size of the array. Following N lines, each contains one integer, i{th} element of the array

java--将数组反转

java源代码示例展示: public static void main(String[] args) { String [] a = {"1","2","3"}; System.out.print("初始数组a为:\n"); for (String string : a) { System.out.print(string + "\t"); } String [] b = reverseArray(a);

将字符串拆成数组,过滤字符串

/**     * 将字符串拆成数组     * @param string $string:字符串     * @return 返回拆成的数组     */    function mbStringToArray ($string) {        $string = $this->getChinaEnglishNumString($string);        $array = array();        $strlen = mb_strlen($string);        wh

字符串和字符数组

  1.字符串 严格意义上来说,C语言并没有字符串原生的字符串的类型,而是通过字符指针来实现的:char *p = "LINUX";.而对于其他的高级语言来说,比如C++的就存在字符串类型: string p1 = "I LOVE LINUX"; . 字符串在内存中其实就多个字节组成的,且地址都是连续的:指针指向字符串的的头部:字符串的结尾是以"\0"(是真能整的零)作为字符串结束的标志. "\0" 的理解: \0 是一个 A

1.7 字符串和字符数组的转换

package Demo; public class Demo2 { public static void main(String[] args) {  String str = "helloworld";  char c[] = str.toCharArray(); //字符串转换为字符数组  for(int x=0;x<c.length;x++){   System.out.println(c[x]+".");   } /*h.  e.  l.  l.  

laravel 将数组转化成字符串 再把字符串转化成数组

这是在给阮少翔改代码的时候用的方法, 开始的数据用explored转化成数组不是想要的结果, 我就自己写了一个方法把有用的信息提取出来拼接成一个字符串, 再用explored将字符串转化成数组.   方法有点笨, 但是最后是解决了阮少翔的问题 $re1 = DB::table('admin_user') ->join('admin_role_user','admin_user.id','=','admin_role_user.user_id') ->select('admin_role_use