我试图通过使用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数组的长度-而不是输入String的长度(因为我们将删除空格):

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

}


但是说实话,您根本不需要迭代器。您可以只检查Set size:

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;
}

07-24 22:18