我试图通过使用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;
}