比较字符和字符串

时间:2015-09-04 09:00:48

标签: java string

我正在编写一个程序来检查给定的句子是否为panagram,但是我无法将每个字符与字符串中的字符进行比较。 谁能建议我一种方法来获得所需的输出?

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

6 个答案:

答案 0 :(得分:4)

您可以将其转换为String,然后进行比较。

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

简单的O(n)解决方案。

或者您可以使用Set并检查它的大小。

HashSet<Character> set = new HashSet();
for(int i = 0; i < word.length(); ++i)
  set.add(word.charAt(i));
System.out.println(set.size() == 26 ? "Pangram" : "Not Pangram");

//A 2 liner would be
HashSet<Character> set = new HashSet<Character>(Arrays.asList(word.toCharArray()));
System.out.println(set.size() == 26 ? "Pangram" : "Not Pangram");

spookieCookie添加的一点。这些方法仅在字符串只有小写字母时才适用。

String s = "sdgosdgoih3208ABDDu23pouqwpofjew@#$%^&".repalceAll("[^A-Za-z]+", "");
String s = s.toLowerCase();
//do the computation then

答案 1 :(得分:4)

您可以使用:

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

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

答案 2 :(得分:3)

将数组转换为arraylist

<meta-data
    android:name="com.google.android.gms.version"
    android:value="7895000 " />
<activity
    android:name="com.google.android.gms.ads.AdActivity"
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />

制作一个列表来保存读取的字符:

List<Character> alphabet = Arrays.asList(a);

然后检查句子中的每个字符是否都是字母表的一部分。由于Set<Character> chars = new HashSet<>();

的特性,不会添加重复项
Set

然后检查for (Character c : word.toCharArray()) { chars.add(c); } 的大小是否等于给定的字母:

Set

答案 3 :(得分:2)

请改为尝试:

[
{"id_marque":"50670","marque_name":"NIK HUBER GUITARS"},{"id_marque":"50671","marque_name":"NIKALAS CATLOW"},{"id_marque":"1","marque_name":"NIKE"},{"id_marque":"50672","marque_name":"NIKE"},
{"id_marque":"50673","marque_name":"NIKE"},{"id_marque":"50674","marque_name":"NIKE 6.0"},{"id_marque":"50675","marque_name":"NIKE ACCESSORIES"},{"id_marque":"50676","marque_name":"NIKE ACG"},{"id_marque":"50677","marque_name":"NIKE ACTION SPORTS"},{"id_marque":"50678","marque_name":"NIKE AIR MAX"},{"id_marque":"50679","marque_name":"NIKE BAIN"}
]

答案 4 :(得分:1)

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

    for (int i = 0; i < a.length; i++) {
        if (word.contains(a[i])) {
            count++;
            // } else { break;
        }
    }

备注:更好地使用String[] a这是一种更常规的语法,而不是String a[],其语法是为了C / C ++兼容性而添加的。

答案 5 :(得分:0)

要检查字符串与字符的相等性,您可以更改代码最低限度

if ((a[i]).equals(word.charAt(j))if ((a[i]).equals("" + word.charAt(j))

这使您可以在两个字符串之间进行相等检查。

另外您可以更改第if ((a[i]).equals(word.charAt(j))行 到if ((a[i]).equals(word.substring(j,j+1))