java - Pangram 在 Java 中使用哈希集

标签 java string set hashset pangram

我试图通过在 Java 中使用 set 来确定字符串是否为 pangram

我试过下面的代码。现在输出显示不是 pangram,但它应该是 pangram。请告诉我我的解决方案有什么问题

    // Java Program to illustrate Pangram 
    import java.util.*;
    public class GFG 
    { 
        public static boolean checkPangram (String str) 
        { 
            int index = 0,count=0; 
            char s[]=str.toCharArray();
            Set<Character> hs= new HashSet<Character>();
            for(index=0;index<str.length();index++)
            {
                hs.add(s[index]); 
            }
            Iterator<Character> i=hs.iterator();
            while(i.hasNext())
            {
              count++;
              i.next();
            }
            if(count==26)
              return true;
            return false;
        } 

        // Driver Code 
        public static void main(String[] args) 
        { 
            String str = "the quick brown fox jumps over the lazy dog"; 

            if (checkPangram(str) == true) 
                System.out.print(str + " is a pangram."); 
            else
                System.out.print(str+ " is not a pangram."); 

        } 
    } 

输出应该是 true 或 false 但我没有得到输出

最佳答案

Iterator::hasNext 检查是否有下一个元素要迭代,但它不会移动到下一个元素。要将迭代器移动到下一个元素,您必须使用 Iterator::next 返回下一个元素。将您的 while 循环更改为:

while (i.hasNext()) {
    count++;
    i.next();
}

在将 String 转换为 char 数组之前,您必须从中删除空格,因为 pangram 不应考虑空格。此外,在创建 Set 时,您应该迭代直到达到 char 数组的长度 - 而不是输入字符串的长度(因为我们将删除空格):

public static boolean checkPangram(String str) {
    int index = 0, count = 0;

    char s[] = str.replaceAll("\\s+","") //remove spaces
            .toCharArray();

    Set<Character> hs = new HashSet<Character>();

    for (index = 0; index < s.length; index++) { //iterate over your charArray
        hs.add(s[index]);
    }

    Iterator<Character> i = hs.iterator();

    while (i.hasNext()) {
        count++;
        i.next();
    }

    return count == 26;  //simplified condition result to be returned

}

不过老实说,你根本不需要迭代器。您可以只检查设置大小:

public static boolean checkPangram(String str) {
    char[] s = str.replaceAll("\\s+", "")
                .toCharArray();

    Set<Character> hs = new HashSet<Character>();

    for (int index = 0; index < s.length; index++) {
        hs.add(s[index]);
    }

    return hs.size() == 26;
}

关于java - Pangram 在 Java 中使用哈希集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57126533/

相关文章:

java - 为什么 Eclipse 会在一个 package-info.java 中生成两个注释 block

Javascript全局字符串替换为数组中的不同元素?

C# DataGridView.Rows.ToString() 方法

java - 如何在对象中存储 Set/HashSet?

java - securitypolicy 策略不是 <wsp :Policy> element

java - JTS 的最小边界矩形

java - 跨应用程序的多个实例维护 StringBuffer 类中的日志

c - 尝试访问 C 中字符串数组的第一个字符时出现段错误

python - 在 Pandas groupby 操作之后将两列组合成一个集合

c++ - 等同于迭代器