在JAVA中对数组[K,q,a,F,j,A,f]排序,要求排序结果为:[A,a,F,f,K,q].
解决方案 »
- 关于静态属性的,输出的结果我就不说了,能解释的自然知道!
- 请大家推荐几个JAVA的编译器好吗,想在家里装一个学习,不知道在哪里下载。。谢谢~!坐等
- 下列哪些会导致线程暂停执行
- 不可变类的问题?
- 大家知不知道这个ip(65.214.45.41)是谁的阿?
- class file has wrong version 49.0, should be 48.0
- 关于ArrayList查找问题,请指教
- “JDBC:ODBC”桥接数据库错误,大虾,帮忙!!!!!!!!
- struts结构访问数据库sqlserver通过命名管道方式怎么访问的?
- 我装的是JDK1.4工具用的是JCreator2.5为什么编译的时候老出现这句话,以前没有呀
- 非法的表达式开始,这个是什么错误
- StringBuffer与StringBuilder 有什么区别??
字符串“Bc”,“Ad”,“aC”,“Hello”,“X man”,“little”,“During”,“day”
能够排序成 “Ad”,"aC",“Bc”,“During”,“day”,“Hello”,“little”,“Hello”,
也就是说,在排序的过程并不是传统的按照字符串排序,在排序中还需要将小写字母一并排序,
也就是说a字符串要在B或b之前。*/
public class LetterSort { public static void main(String[] args) {
// TODO Auto-generated method stub
String[] str = { "dad",
"bOod",
"bada","Admin","Good","aete","cc","Ko","Beta","Could"};
MyString[] strcompare = new MyString[str.length];
for(int i = 0;i<str.length;i++){
strcompare[i] = new MyString(str[i]);
}
Arrays.sort(strcompare);
for(MyString string:strcompare){
System.out.println(string);
}
}
}/*这个类是封装了一个String。实现Comparable接口。这样使得可以用Arrays的sort方法进行排序*/
public class MyString implements Comparable<MyString> {
private String string;
public void setString(String string) {
this.string = string;
} public String getString() {
return string;
} //构造方法
public MyString(String string){
this.string = string;
}
//比较
public int compareTo(MyString other) {
// TODO Auto-generated method stub
char[] thisarr = this.string.toCharArray(); //存储被包装 字符串的字符数组
char[] otherarr = other.getString().toCharArray(); //存储要比较的字符串的字符数组
/*取得循环次数,为两个字符串的长度的最小值*/
int iterate = thisarr.length<otherarr.length?thisarr.length:otherarr.length;
boolean mlowercase; //记录被封装的字符串循环到的字符是否为小写
boolean olowercase; //记录要比较的字符串循环到的字符是否为小写
char thisletter; //记录被封装的字符串循环到的字符
char otherletter; //记录要比较的字符串循环到的字符
/*字符串相等,则返回0*/
if(this.getString().equals(other.getString())){
return 0;
}
/*循环字符串,做比较*/
for(int i=0;i<iterate;i++){
mlowercase = this.isLowercase(thisarr[i]);
olowercase = this.isLowercase(otherarr[i]);
/*把比较字符变成大写*/
thisletter = mlowercase?(char)(thisarr[i]-32):thisarr[i];
otherletter = olowercase?(char)(otherarr[i]-32):otherarr[i];
/*比较*/
if(thisletter!=otherletter){ //比较字母大小,不相等,则取差值,字母小的在前面
return (thisletter-otherletter);
}else{ //字母的大写形式相同
if(mlowercase == olowercase){ //此位置大小写形式相同,判断下一个字符;
continue;
}else if(mlowercase){ //被封装的字符为小写,则返回负值
return 32;
}else if(olowercase){ //比较字符串的字符为小写,则返回正直
return -32;
}
}
}
/*如果循环好之后还分不出大小,则小的排在后面*/
return (thisarr.length<otherarr.length?-1:1);
}
@Override
public String toString() {
// TODO Auto-generated method stub
return string;
} //通过码值,来判断字符是否为小写字母
private boolean isLowercase(char ch){
if((int)ch >=97 && (int)ch<=122){
return true;
}else{
return false;
}
}}
package test;/**
* @author - yy
* @time - Dec 2, 2008 10:24:15 AM
*/
public class Sort {
/**
* 排序,采用最简单的冒泡排序
* @param array
* @return
*/
private char[] doSort(char[] array) {
char ch;
for (int i = 0; i < array.length; ++i) {
for (int j = 0; j < array.length - i - 1; ++j) {
if (this.compare(array[j], array[j + 1]) > 0) {
ch = array[j];
array[j] = array[j + 1];
array[j + 1] = ch;
}
}
}
return array;
}
/**
* 比较 a 和 b[忽略大小写,同时同一个大小写字母,大写的小于小写的]
*
* @param a
* @param b
* @return
*/
private int compare(char a, char b) {
char aa = (char) (a | 32);
char bb = (char) (b | 32);
if (aa == bb) {
return a < b ? -1 : 1;
} else if (aa < bb) {
return -1;
} else {
return 1;
}
}
public static void main(String[] args) {
char[] array = new char[] { 'K', 'q', 'a', 'F', 'j', 'A', 'f' };
new Sort().doSort(array);
System.out.println(array);//输出: AaFfjKq
}
}
//在JAVA中对数组[K,q,a,F,j,A,f]排序,要求排序结果为:[A,a,F,f,K,q].
public static void main(String...args) {
char[] cstr = {'A','a','F','f','K','q'};
for(int i = 0 ;i<cstr.length; i++) {
cstr[i] = Character.toLowerCase(cstr[i]);
}
Arrays.sort(cstr);
for(int i = 1 ;i<cstr.length; i++) {
if(cstr[i] == cstr[i-1]) {
cstr[i-1] = Character.toUpperCase(cstr[i-1]);
}
}
System.out.println(Arrays.toString(cstr));
}
}
这个是可以满足需求的。。