代码:公共类重复
{
public static void main(String[] args)throws IOException
{
System.out.println("Enter words separated by spaces ('.' to quit):");
Set<String> s = new HashSet<String>();
Scanner input = new Scanner(System.in);
while (true)
{
String token = input.next();
if (".".equals(token))
break;
if (!s.add(token))
System.out.println("Duplicate detected: " + token);
}
System.out.println(s.size() + " distinct words:\n" + s);
Set<String> duplicatesnum = new HashSet<String>();
String token = input.next(); if(!s.add(token)) { duplicatesnum.add(令牌); System.out.println(“检测到重复:”+令牌); }
的System.out.println(duplicatesnum.size());
} } 输出是: 输入以空格分隔的单词('。'退出): 一二二一。 检测到重复:一个 检测到重复:两个 2个不同的词: [二,一]
答案 0 :(得分:2)
使用HashMap代替HashSet。 HashSet仅存储值。 HashMap将值映射到另一个值(有关解释,请参阅http://www.geekinterview.com/question_details/47545)
在您的情况下,HashMap的键是您的字符串(就像HashSet的键是字符串一样)。 HashMap中的值是您遇到此字符串的次数。
找到新字符串后,将其添加到HashMap,并将条目的值设置为零。 当您以后遇到相同的字符串时,请在HashMap中增加该值。
答案 1 :(得分:2)
我假设您想知道不同重复单词的数量。您可以使用另一个HashSet<String>
作为重复项。
//Outside the loop
Set<String> duplicates = new HashSet<String>();
//Inside the loop
if (!s.add(token))
{
duplicates.add(token);
System.out.println("Duplicate detected: " + token);
}
//Outside the loop
System.out.println(duplicates.size());
此外,如果您关心每个单词的出现,则会声明HashMap<String, Integer>
,就像其他帖子一样。
但是如果你想要所有重复单词的数量(不同),只需声明一个计数器:
//Outside the loop
int duplicates = 0;
//Inside the loop
if (!s.add(token))
{
duplicates++;
System.out.println("Duplicate detected: " + token);
}
//Outside the loop
System.out.println(duplicates);
答案 2 :(得分:1)
因为您使用的是HashSet
,所以您不会知道有多少重复项。如果您使用HashMap<String, Integer>
,则只要您发现密钥为!= null
,就可以增加。
答案 3 :(得分:0)
在if (!s.add(token))
中,您可以增加一个计数器,然后在结尾显示它的值。
答案 4 :(得分:0)
你的问题有点误导。有些人明白你想要:
输入:你好男人,你好女人,对你的男人说好话。
输出
找到重复:你好
找到重复:男人
重复计数:2
其他人理解你想要的:
输入:你好男人,你好女人,跟你的男人问好。
输出
找到重复:你好 - 3次出场
发现重复:男人 - 2次露面
假设您想要第一个选项 - 使用 Petar Minchev 的解决方案
假设您想要第二个选项 - 请使用 Patrick 的解决方案。不要忘记,当你在Map中使用Integer时,你也可以得到/放置int
,而Java会自动为你打包/取消它,但是如果你依赖它 - 你可以在什么时候获得NPE向地图询问不存在的密钥:
Map<String,Integer> myMap = new HashMap<String,Integer>();
myMap.get("key that does not exist"); // NPE here <---
NPE是由于'get'的返回值为null,并且该值被强制转换为Integer
,之后将调用intValue()
方法 - 从而触发NPE。< / p>
答案 5 :(得分:0)