如何在 Java 中获取出现在字符串中的所有字符的列表,以及它们的出现次数?假设我们有一个字符串“我现在真的很忙”,所以我应该得到:
i-2、a-2、r-2、m-1 等。
如何在 Java 中获取出现在字符串中的所有字符的列表,以及它们的出现次数?假设我们有一个字符串“我现在真的很忙”,所以我应该得到:
i-2、a-2、r-2、m-1 等。
只需映射每个字符及其数量即可。您可以使用增强的 for 循环String
获取usingString#toCharArray()
和循环的字符数组。在每次迭代中,从映射中获取计数,如果不存在则设置它,然后将其递增 1 并放回映射中。很简单。
这是一个基本的启动示例:
String string = "I am really busy right now";
Map<Character, Integer> characterCounts = new HashMap<Character, Integer>();
for (char character : string.toCharArray()) {
Integer characterCount = characterCounts.get(character);
if (characterCount == null) {
characterCount = 0;
}
characterCounts.put(character, characterCount + 1);
}
要了解有关地图的更多信息,请查看有关该主题的 Sun 教程。
您评论说它是“针对一个项目”的,但它是一个典型的家庭作业问题,因为它非常基础,并且在一本像样的 Java 书籍/教程的第一章中都有介绍。如果您是 Java 新手,我建议您阅读Sun Trails Covering the Basics。
我不确定您的确切需求,但似乎您想计算出现次数而不管大小写,也许还会忽略空格等字符。所以您可能想要这样的东西:
String initial = "I am really busy right now";
String cleaned = initial.replaceAll("\\s", "") //remove all whitespace characters
.toLowerCase(); // lower all characters
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (char character : cleaned.toCharArray()) {
Integer count = map.get(character);
count = (count!=null) ? count + 1 : 1;
map.put(character, count);
}
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
调整正则表达式以满足您的确切要求(跳过标点符号等)。
是作业吗?在不知道的情况下,我会假设一个尽力而为的答案。
你的问题背后的逻辑是
int
并在那里计算它们:这样你就不需要搜索正确的计数器,而只需增加正确的索引。 String input = "AAZERTTYAATY";
char[] chars = input.toCharArray();
Map<Character, Integer> map = new HashMap<>();
for (char aChar : chars) {
Integer charCount = map.putIfAbsent(aChar, 1);
if (charCount != null) {
charCount++;
map.put(aChar, charCount);
}
}