首页 > 代码库 > 关于字符串反转和数组反转的问题
关于字符串反转和数组反转的问题
关于反转这个问题,在晚上查了些资料,有很多非常不错的思想,要熟练的掌握这些思想,现在把这些总结如下:
字符串反转:
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 }
关于字符串反转和数组反转的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。