题目:现在有一串字符串,内容是: String str="wo ai heima, heima shi wo jia, Qing Da jia Ai Hu Ta!";
要求:对这个字符串中的字符进行排序, 排序结果如下: aaaabbbbcccccdddd....AAABBBCCCDDD...
题目分析:把字符串按字符排序,大写字母排在小写字母的后面,大小写相同则按字典顺序排列,不去除重复元素
代码如下
public class Test8_DifUpAndLow {
public static void main(String[] args) {
/*在TreeSet集合声明时用匿名类实现比较器Comparator接口,
* 该TreeSet集合在存入元素时则按重写的compare方法顺序存放元素
*/
TreeSet<Character> ts=new TreeSet<>(new Comparator<Character>() {
@Override
/*compare方法比较分析:分为三种情况:
* 1.小写字母和大写比较,小写始终在大写前面,返回任意负数即可
* 2.大写字母和小写比较,大写始终在小写前面,返回任意正数即可
* 3.大小写相同则正常比较c1-c2,因为不去除重复值,相同则返回任意一个非0数
* */
public int compare(Character c1, Character c2) {
if((c1>='a'&&c1<='z')&&(c2>='A'&&c2<='Z')) {
return -1;
}else if((c1>='A'&&c1<='Z')&&(c2>='a'&&c2<='z')) {
return 1;
}else {
int num=c1-c2;
return num==0 ? 1:num;
}
}
});
String str="Wo aiL@ HEima, Heima shi wo jia, Qing Da jia Ai Hu Ta!";
String[] sarr=str.split("\\W+"); //把字符串分割为字符串数组,遇到一个或多个空格、非字母数字的字符则分割,
for (String st : sarr) { //遍历字符串数组的每个字符串
char[] c=st.toCharArray(); //将每个字符串转换为字符数组,然后遍历该字符数组,将每个字符放入TreeSet中
for (char d : c) {
ts.add(d);
}
}
for (char c : ts) { //遍历集合输出TreeSet集合
System.out.print(c);
}
}
}
|
|