Java 比较字符和字符串

Java 比较字符和字符串,java,string,Java,String,我正在编写一个程序来检查给定的句子是否是泛指,但我无法将每个字符与字符串中的字符进行比较。 有人能给我推荐一种获得所需输出的方法吗 Scanner scan = new Scanner(System.in); String panagram = scan.nextLine(); String word = panagram.toLowerCase(); System.out.println(word); String a[] = { "a", "b", "

我正在编写一个程序来检查给定的句子是否是泛指,但我无法将每个字符与字符串中的字符进行比较。 有人能给我推荐一种获得所需输出的方法吗

    Scanner scan = new Scanner(System.in);
    String panagram = scan.nextLine();
    String word = panagram.toLowerCase();
    System.out.println(word);
    String a[] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
            "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
            "x", "y", "z" };
    int count = 1;
    System.out.println("a=" + a.length);
    for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < word.length(); j++) {

            if ((a[i]).equals(word.charAt(j)))// problem occurs here  {

                count++;
                break;
            }
        }

    }

    if (count == 26) {
        System.out.println("pangram");
    } else {
        System.out.println("not pangram");
    }
Scanner scan=新的扫描仪(System.in);
字符串panagram=scan.nextLine();
String word=panagram.toLowerCase();
System.out.println(word);
字符串a[]={“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”、“j”、“k”,
“l”、“m”、“n”、“o”、“p”、“q”、“r”、“s”、“t”、“u”、“v”、“w”,
“x”、“y”、“z”};
整数计数=1;
System.out.println(“a=“+a.length”);
for(int i=0;i
您可以将其转换为字符串,然后进行比较

String s = Character.toString('c');
if(s.equals(s2)){..}
或者,您可以将其添加到空字符串中,使其成为字符串

String s = 'c' + "";
if(s.equals(s2)){..}
或者你可以比较它的ascii值

因为只有单个字符,为什么不使用字符数组呢

char []a = {'a', 'b', 'c'....};
if(a[i] == 'a')//you could use == in this case.
{..}

你也不需要这样检查

您可以创建26个大小的布尔数组,因为只有26个字符,并检查每个字符是否至少存在一次

boolean []arr = new boolean[26];
for(int i = 0; i < word.length(); ++i)
{
  arr[word.charAt(i) - 'a'] = true;
}
isPan(arr);
public boolean isPan(boolean[] arr)
{
for(int i = 0; i < arr.length; ++i)
 if(!arr[i])
   return false;
return true;
}
您可以使用:

(a[i]).equals(String.valueOf(word.charAt(j)))

或者将
a
数组从
String[]
更改为
char[]
,并使用
=
运算符比较字符。

可以使用
String.contains(String)
,因为
a
中的每个字母都已经是字符串

    for (int i = 0; i < a.length; i++) {
        if (word.contains(a[i])) {
            count++;
            // } else { break;
        }
    }
for(int i=0;i
备注:最好使用
String[]A
,这是一种更常规的语法,而不是为C/C++兼容性而添加语法的
String A[]

尝试以下方法:

public void checkPanagram() {    
    boolean isPanagram = false;
    String word = "The quick brown fox jumps over the lazy dog";
    String a[] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
        "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
        "x", "y", "z" };        
    for (int i = 0; i < a.length; i++) {
        if (word.toLowerCase().contains(a[i])) {
            isPanagram = true;
        } else {
            isPanagram = false;
            break;
        }
    }        
    if (isPanagram) System.out.println("Yes, panagram");
    else System.out.println("No, not panagram");
}
public void checkPanagram(){
布尔isPanagram=false;
String word=“敏捷的棕色狐狸跳过懒狗”;
字符串a[]={“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”、“j”、“k”,
“l”、“m”、“n”、“o”、“p”、“q”、“r”、“s”、“t”、“u”、“v”、“w”,
“x”、“y”、“z”};
for(int i=0;i
要检查字符串与字符的相等性,可以至少更改代码

if((a[i])等于(word.charAt(j))
to
if((a[i])等于(“+word.charAt(j))

这将为您提供两个字符串之间的相等性检查

或者如果((a[i]).equals(word.charAt(j))

如果((a[i]).equals(word.substring(j,j+1))
将数组转换为arraylist

List<Character> alphabet = Arrays.asList(a);
然后检查
集合的大小是否等于给定的字母表:

return (chars.size() == alphabet.size());

使用
char[]
而不是
String[]
@kevin我已经试过使用==了,但它给出了error@vineethPrabhakaran不管怎样,我把你的
String[]
读成
char[]
你可以用更好的方法来读。从句子中添加字母表中的任何字符(通常是
O(n)
,代表n个字符)注意一个集合,然后检查集合的大小。注意<代码>如果< /代码>条件来检查添加元素是否为字符,则是<代码> o(1)< /代码>侧注释(与TheLostMind的注释有关):我不确定你的算法是否有效。考虑一个26 A的字符串:在外循环的第一次迭代中,你得到<代码> a(0)=“a”。
。现在您循环26个“a”字符的字符串,并为内部循环的每次迭代调用
count++
。最后
count
将是26,并且您的代码假定这是一个盘符(尽管不是)。此外,它不适用于长度超过26个字符的字符串。因此,最好使用LostMind建议的set方法。
set
思想非常清晰。如何使用pangram,它不仅包含字母表中的字符?添加一个yourstring.replaceAll([^a-Za-z]+“,”)要删除字符串中除字符以外的所有内容,还应先执行string.toLowerCase(),然后再对其字符进行设置。@Spookiecookie True,在这种情况下,设置方法将失败。但通常只能对较低的拉丁字母进行pangram检查。不过,在列表上多次迭代可能会很慢(在最坏的情况下只有26个元素,但它仍然可以加起来)所以最好使用集合。这样你甚至不必检查
chars.contains(c)
,只需添加它。你也可以跳过
alphabet.contains(c)
,只需检查
chars.size()==alphabet.size()
最后,允许使用灵活的字母表。非常正确!我将对我的答案进行相关更改。只是一个提示:如果你将代码作为答案发布,说明你更改了什么以及为什么更改会很好。这使其他人更容易理解你的答案的含义,在编写答案时,你也会反映出来,可能会发现缺陷。好的……我将记住它并从下次开始执行:-)
List<Character> alphabet = Arrays.asList(a);
Set<Character> chars = new HashSet<>();
for (Character c : word.toCharArray()) {
    chars.add(c);
}
return (chars.size() == alphabet.size());