我对如何计算以相同的第一个字符开头的队列中的名字数量感兴趣。
我的程序将要求用户输入多个名称,名称将存储在队列中。但是,我需要计算队列中以相同的第一个字符开头的名称数。我怎么做?我是java的新手,所以我不太了解。
应打印以下统计数据:
- 队列中以相同字母开头的国家/地区名称总数 - 要计算上述统计信息,您可以使用其他数据结构,例如Array或ArrayList / Vector。
示例:
用户输入/队列中的内容:
- 鲍勃
- 洛
- 肖恩
- 苏西
- 萨利
- 伊达
醇>
输出:
以I开头的国家总数:2
以S:3开头的国家总数
我已经尝试过这方面的搜索,但我还没有找到一个可靠的方法来做到这一点。任何帮助将不胜感激。
答案 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的答案适用于所有情况,如果你想避免使用哈希映射,你也可以做这样的事情。我认为你忽视了案件。