我试图通过在 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/