如何计算以相同的第一个字母开头的队列中的名称数量?

时间:2015-12-23 12:08:03

标签: java arrays arraylist stack queue

我对如何计算以相同的第一个字符开头的队列中的名字数量感兴趣。

我的程序将要求用户输入多个名称,名称将存储在队列中。但是,我需要计算队列中以相同的第一个字符开头的名称数。我怎么做?我是java的新手,所以我不太了解。

  

应打印以下统计数据:
   - 队列中以相同字母开头的国家/地区名称总数    - 要计算上述统计信息,您可以使用其他数据结构,例如Array或ArrayList / Vector。

示例:

  

用户输入/队列中的内容:

     
      
  1. 鲍勃
  2.   
  3.   
  4. 肖恩
  5.   
  6. 苏西
  7.   
  8. 萨利
  9.   
  10. 伊达
  11.   

输出:

  

以I开头的国家总数:2

     

以S:3开头的国家总数

我已经尝试过这方面的搜索,但我还没有找到一个可靠的方法来做到这一点。任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:3)

尝试类似:

Map<Character, Integer> map = ...;// create a map which can hold key as first character and value as number of occurances of that character

for (String input : userInputs) {//iterate over the user inputs
    Integer count = map.get(input.charAt(0));
    if (count == null) count = 0;
    map.put(input.charAt(0), count + 1);//for each input insert key as first character and value as 1 if its first time else last count + 1.
}

或者,如果您使用的是Java 8,则可以使用以下内容:

userInputs.stream().forEach(input -> map.put(input.charAt(0), map.getOrDefault(input.charAt(0), 0) + 1));

答案 1 :(得分:0)

使用循环检查这个简单的实现 - 即如果您只对一个字母感兴趣。否则,我推荐地图解决方案。

    Queue<String> names = new LinkedList<String>();
    //You need to fill the queue

    //The starting letter
    String ch = "a";


    int count = 0;
    for(String name : names)) {
 if (name.toLowerCase().startsWith(ch)) {
            ++count;
        }
    }
    System.out.printf("%d names start with %s%n", count, ch);

答案 2 :(得分:0)

只需遍历队列并通过将其拆分为char数组来检查第一个字母,如果找到匹配的字母,则递增特定计数器。

答案 3 :(得分:0)

如何使用Map<Character, Queue<String>>存储名称并为计数调用m.get('I').size()

e.g。

// for adding name to map use following piece of code

Character c = Character.toUpperCase(name.charAt(0));

if (m.containsKey(c)) {
    m.get(c).add(name)
} else {
    Queue<String> l = new LinkedList<String>();
    l.add(name);
    m.put(name.charAt(0), l);
}

请参阅收集API。

答案 4 :(得分:0)

    String[] list = {};
    int[] count = new int[26];
    for(String name : list){
        char firstChar = Character.toLowerCase(name.charAt(0));
        count[firstChar - 97]++;
        //97 is the ascii value for 'a'
    }

@SMA的答案适用于所有情况,如果你想避免使用哈希映射,你也可以做这样的事情。我认为你忽视了案件。