用于确定句子中重复数量的程序

时间:2010-06-17 06:00:00

标签: java

代码:公共类重复

{

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个不同的词: [二,一]

6 个答案:

答案 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)