gpt4 book ai didi

java - TreeMap "ё"有什么问题?

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:43 24 4
gpt4 key购买 nike

任务:尝试从控制台计算单词中的字母数量;

问题:带有字母“ё”;

 public static void main(String[] args) throws Exception{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

String abc = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"; //alphabet
//String abc = "абвгдежзийклмнопрстуфхцчшщъыьэюя"; // without "ё";
//String abc = "abcdefghijklmnopqrstuvwxyz";// eng

char[] abcArray = abc.toCharArray();

ArrayList<Character> alphabet = new ArrayList<Character>();
for (int i = 0; i < abcArray.length; i++)
{
alphabet.add(abcArray[i]);
}

//read console
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 10; i++)
{
String s = reader.readLine();
if (s.isEmpty()) break;
list.add(s.toLowerCase());
}

Map<Character, Integer> result = new TreeMap<Character, Integer>();

for (Character x : alphabet){
int count = 0;
for (String y : list){
char[] data = y.toCharArray();
for (int i = 0; i < data.length; i++) {
if (x.equals(data[i])){
count++;
}
}
result.put(x,count);
}
}
for (Map.Entry<Character, Integer> p : result.entrySet()){
System.out.println(p.getKey() + " " + p.getValue());
}
}

输出代码

    абвгдеёжзийклмнопрстуфхцчшщъыьэюяа 1б 1в 1г 1д 1е 1ж 1з 1и 1й 1к 1л 1м 1н 1о 1п 1р 1с 1т 1у 1ф 1х 1ц 1ч 1ш 1щ 1ъ 1ы 1ь 1э 1ю 1я 1ё 1

字母“ё”位于列表底部,但应位于“e”和“ж”之间

in debug mode - in cycle letter "ё" came after "e" and put in map after "e". But when we work with next one letter "ж" letter "ё" move to the bottom of list, and "ж" placed after "e".

如果使用不带“ё”的字母或英文字母 - 所有字母都保持其位置。我的问题是:为什么会发生这种情况?我做错什么了吗?我一定应该使用 map 。

最佳答案

默认情况下,字符按其 unicode 值排序。您需要提供自定义 Comparator 以使 TreeMap 进行不同的排序。最简单的方法是使用 1 个字符的长字符串作为键并使用 Collat​​or:

Map<String, Integer> result = new TreeMap<>(Collator.getInstance(new Locale("ru")));
....
result.put(String.valueOf(x), count);

但是,出于性能原因,我会完全避免使用 TreeMap 并使用简单的 int[] 进行计数,其索引将与 abcArray 的索引匹配。这样,您将避免对整数和字符进行装箱和拆箱。

关于java - TreeMap "ё"有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37564623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com