任务如下:我需要编写一个将一些文本作为输入并返回的方法Map
,该方法存储该文本中每个文字字符的重复次数。我把字符串拆分成一个字符数组,存入ArrayList
,排序,然后计算每个字符重复了多少次,现在我需要把它Map
放入 这是我到目前为止所做的:
public static Map<Character, Integer> countSymbolsNew(String text)throws Exception{
//сделать отсортированный список
//посчитать количество повторений каждого символа и занести в переменную
//результат добавить в мапу
if (text == null)
throw new Exception("No text");
Map<Character, Integer> map = new HashMap<>();
ArrayList<Character> chars = new ArrayList<>();
for (int i = 0; i < text.length(); i++) {
char c = text.toLowerCase().charAt(i);
if (Character.isLetter(c)){
chars.add(c);
}
}
Collections.sort(chars);
System.out.println(chars);
//надо взять первый элемент массива, пройти им по всему списку и если повторяется то плюсовать счетчик
//если не повторился то счетчик равен 1
int maxCount = 0;
for (Character aChar : chars) {
int count = 0;
for (Character ch : chars) {
if (aChar.equals(ch)){
count++;
}
}
if (count > maxCount){
maxCount = count;
}
System.out.print(count + " ,");
}
return map;
}
理论上,我有点想象元素是如何添加到地图中的,但实际上,我无法做任何进一步的事情。请帮忙解释一下。
如果“导师”建议对数组进行排序并且显然害怕做额外的放置(嗯,一个人的头脑中没有太多 bzyk),那么你可以这样做。原则上,简单地添加
map.put(aChar, count)
已经解决了问题,甚至@Roman Danilov 也写了这个。但是这个解决方案有一个缺点——二次复杂度。如果数组没有排序,那么人们可能对此视而不见。但是数组已经排序了,所以相同的元素在一行中。你只需要跑起来总结一下。某处如此如果它很简单并且没有 Java8 特性,那么这就足够了:
在这里,我们只是遍历字符数组并将每个字符放入映射中。如果这样的符号已经存在,我们只需将相同的符号放在地图中,但计数器会增加,而旧的会被覆盖。
如果按照您的方式做很重要,那么您可以执行以下操作: