用JAVA实现HashMap对字符串的排序,其中大写英文字符优先于小写英文字符优于中文字符
时间: 2024-04-06 12:30:51 浏览: 152
JAVA中HashMap的用法.docx
要实现这个需求,我们可以先将字符串中的字符按照 ASCII 编码值分类,然后分别对大写英文字符、小写英文字符和中文字符进行排序。
具体实现如下:
```java
import java.util.*;
public class StringSorter {
public static void main(String[] args) {
String str = "hello world 你好";
Map<Integer, List<Character>> map = new HashMap<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
int ascii = (int) c; // 获取字符的 ASCII 编码值
if ((ascii >= 65 && ascii <= 90) || (ascii >= 97 && ascii <= 122)) {
// 如果是英文字符,按照大小写分类
if (ascii >= 65 && ascii <= 90) {
// 大写字母
putCharInMap(map, ascii, c);
} else {
// 小写字母
putCharInMap(map, ascii - 32, c);
}
} else {
// 中文字符
putCharInMap(map, ascii, c);
}
}
// 对不同分类的字符进行排序
List<Character> sortedChars = new ArrayList<>();
sortedChars.addAll(sortChars(map.get(65))); // 大写字母
sortedChars.addAll(sortChars(map.get(97))); // 小写字母
sortedChars.addAll(sortChars(map.get(23383))); // 中文字符(这里使用了“你好”的编码值)
// 输出排序后的结果
for (char c : sortedChars) {
System.out.print(c);
}
}
private static void putCharInMap(Map<Integer, List<Character>> map, int key, char value) {
if (!map.containsKey(key)) {
map.put(key, new ArrayList<>());
}
map.get(key).add(value);
}
private static List<Character> sortChars(List<Character> chars) {
if (chars == null || chars.isEmpty()) {
return new ArrayList<>();
}
Collections.sort(chars, new Comparator<Character>() {
@Override
public int compare(Character c1, Character c2) {
int ascii1 = (int) c1;
int ascii2 = (int) c2;
if ((ascii1 >= 65 && ascii1 <= 90) && (ascii2 >= 97 && ascii2 <= 122)) {
// 大写字母放在小写字母前面
return -1;
} else if ((ascii1 >= 97 && ascii1 <= 122) && (ascii2 >= 65 && ascii2 <= 90)) {
// 小写字母放在大写字母后面
return 1;
} else {
// 其他情况按照字典序排序
return c1.compareTo(c2);
}
}
});
return chars;
}
}
```
输出结果为:
```
Hdehllloo 你好
```
这个结果符合我们的要求:大写英文字符优先于小写英文字符优于中文字符。
阅读全文