总结向
11.16做题问题:
对字符串中字符进行自然顺序排序。
数组最终转换为字符串输出的问题。
解法:
//对字符串中字符进行自然顺序排序。
public static void main(String[] args) {
String str1 = "abcwerthelloyuiodef";
System.out.println(aim);
String str = stringSort(str1);
System.out.println(str);
}
public static String stringSort(String str1) {
char[] c = str1.toCharArray();
int l = 0, r = c.length-1;
ks_sort(c, l, r);
return String.valueOf(c);//方法一
return Arrays.toString(c);//方法二
String a = new String(c);
return a;//方法三 等价于return new String(c);
}
public static void ks_sort(char[] arr, int l, int r) {
int left = l, right = r;
if(left >= right)
return;
char target = arr[left];
while(left < right) {
while(target <= arr[right] && left < right)
right--;
while(target >= arr[left] && left < right)
left++;
swap(arr, left, right);
}
swap(arr, left, l);
ks_sort(arr, l, left-1);
ks_sort(arr, right+1, r);
}
public static void swap(char[] arr,int i,int j) {
char temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
针对String类型的字符串修改排序,首先使用toCharArray(),转换为字符数组,执行完操作后,在转换为String类型。
直接使用toString()方法,在不重写父辈Object的方法只能得到 ——类名@哈希数,使用这一操作需要新类继承Object来重写toString()方法。
//贴出toString()源码
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
result: [C@15db9742
使用Arrays.toString()方法,该方法适用于所有类型的数组,只是输出结果包含字符中括号和逗号,有可能需要重写来去掉额外字符。
//贴出Arrays.toString(char[] a)源码
public static String toString(char[] a) {
if (a == null)
return "null";
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {
b.append(a[i]);
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
result:[a, b, c, d, e, e, e, f, h, i, l, l, o, o, r, t, u, w, y]
使用String.valueOf(char[] a)方法
//贴出String.valueOf(char[] a)源码
public static String valueOf(char data[]) {
return new String(data);
}
result:abcdeeefhilloortuwy
使用String(char[] a)构造函数的方法,需要额外生成变量
//贴出String(char[] a)源码
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}
result:abcdeeefhilloortuwy