在字符串中显示每个字母的出现次数?

时间:2018-04-29 15:29:30

标签: java

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);

    System.out.println("type the sentence you want to find the letters of");
    String sentence = s.nextLine();

    getLetters(sentence);

}

public static void getLetters(String sentence) {
    int count;
    char ch[] = sentence.toCharArray();

    for (int i = 0; i < sentence.length(); i++) {
        System.out.print(ch[i]);
    }

}

我试图在一个句子中显示每个字母(仅限字母)的出现,我迷路了。我已将字符串转换为char数组,但现在我已经丢失了。

例如,如果我输入句子:“你好,你好吗?” 结果将是:

Occurrence of h: 1
Occurrence of e: 2
Occurrence of l: 2
Occurrence of o: 3
etc..

我知道我需要利用我的int计数,但我不知道该怎么做。我们的教授正在让我们使用它:

    c[26];
    c[ch - 'a']++;

而且我不确定在这个小项目中使用它们的位置。

修改:更新

    public static void main(String[] args) {
    Scanner s = new Scanner(System.in);

    System.out.println("type the sentence you want to find the letters of");
    String sentence = s.nextLine();

    getLetters(sentence);

}

public static void getLetters(String sentence) {
    sentence = sentence.toLowerCase();
    int count[];

    char ch[] = sentence.toCharArray();

    for (int i = 0; i < sentence.length(); i++) {
        System.out.print(ch[i]);
    }

    char alphabet[] = "abcdefghijklmnopqrstuvwxyz".toCharArray();
    System.out.println();


}

}

2 个答案:

答案 0 :(得分:1)

使用HashMap<Character, Integer>跟踪。键是唯一的字符,整数计算您看到它的次数。

import java.util.HashMap;

public class J {

  public static void main(String[] args) {

    String string = "aaaabbbccd";

    HashMap<Character, Integer> map = frequency(string);

    System.out.println(map);
  }

  public static HashMap<Character, Integer> frequency(String string) {
    int length = string.length();
    char c;

    HashMap<Character, Integer> map = new HashMap<Character, Integer>();

    // loop thru string
    for (int i = 0; i < length; i++) {
      c = string.charAt(i);

      // If u have already seen that character,
      // Increment its count
      if (map.containsKey(c)) {
        map.put(c, map.get(c) + 1);

      // otherwise this is the first time u
      // have seen it, so set count to 1
      } else {

        map.put(c, 1);
      }
    }

    return map;
  }
}

输出:

{a=4, b=3, c=2, d=1}

答案 1 :(得分:1)

我没有在这里看到使用HashMap的理由。 HashMaps用于将一些值映射到内存中的位置,以便使用HashFunction更快地访问。在这种情况下,他将使用相同或非常相似的数组和这个给定给他的映射函数(ch - &#39; a&#39;)。此外,对于正在这样做的人来说,HashMap可能还为时过早。

你的问题是你没有理解的想法。 java中的字母有值(您可以检查ASCII表)。你有26个字母,第一个是&#39; a&#39;最后是&#39; z&#39;。所以你想拥有26个元素的数组。每当你有一个&#39;在你的字符串中,你想要在数组中将元素增加到0,当你进入&#39; b&#39;你希望增加元素1 ...当你来到&#39; z&#39;因此,事实上(ch - &#39; a&#39;)你将你的字母映射到数组中的位置,其中是它的发生次数。

你接受字符串,做.toLowerCase()大小写,传递一次计数字母,然后打印你找到的东西。