目标:cCBbaA
结果:AaBbCc当然我是做出来了。不过是笨法子。就是分四种情况1.b a 98 97
2.B a 66 97
3.B A 66 65
4.b A 98 65然后比大小交换。有更好的算法么?
结果:AaBbCc当然我是做出来了。不过是笨法子。就是分四种情况1.b a 98 97
2.B a 66 97
3.B A 66 65
4.b A 98 65然后比大小交换。有更好的算法么?
调试欢乐多
我是转化成CHAR再比较的。我的意思是,有比我的解决方法更好的方法么。
public int compare(Character arg0, Character arg1) {
//自己写比较方法
}
});
{
char t = 0;
for (int i = 1; i < data.length; i++)
{
for (int j = i; (j > 0) && comp(data[j], data[j - 1]); j--)
{
t = data[j];
data[j] = data[j - 1];
data[j - 1] = t;
}
}
} static boolean comp(char ch1, char ch2)
{
return (0 >= (("" + ch1).compareToIgnoreCase("" + ch2))) ? true : false;
} public static void main(String[] args)
{
String t = "cCBbaA";
char[] chars = t.toCharArray();
sort(chars);
System.out.println(new String(chars));
}
String str = "ADKskhasSKNX";
byte[] b = str.getBytes();
Arrays.sort(b);
String s = new String(b);
StringBuffer sb = new StringBuffer(s);
System.out.println(sb);
sb = sb.reverse();
System.out.println(sb);
}两次输出一次升排序,一次降排序
int[] arr = new int[s.length()];
for(int i = 0; i<s.length(); i++){
char c = s.charAt(i);
if(c <= 'z' && c >= 'a'){
arr[i] = ((int)c-32)*2+1;
}else {
arr[i] = (int)c*2;
}
}
Arrays.sort(arr);
StringBuffer sb = new StringBuffer();
for(int i = 0; i<s.length(); i++){
if(arr[i]%2 == 1){
arr[i] = (arr[i]-1)/2+32;
sb.append((char)arr[i]);
}else{
arr[i] = arr[i]/2;
sb.append((char)arr[i]);
}
}
System.out.println(Arrays.toString(arr));
return sb.toString();
}长了点 思想是根据传进来的字符串,把他转化为数组,转化的规则为 大写的*2 (小写的-32)*2+1;
在进行排序;
然后再转回来;
再转为字符串
String str = "cCBbaA";
List<String> myList = new ArrayList<String>();
char[] chars = str.toCharArray();
for (char c:chars)
myList.add(String.valueOf(c));
Collections.sort(myList, String.CASE_INSENSITIVE_ORDER);
Collections.sort(myList,new Comparator<String>(){
public int compare(String str1, String str2) {
if (str1.toLowerCase().equals(str2.toLowerCase()))
return str1.compareTo(str2);
else
return 0;
}
});
System.out.println(myList);
}