我正在编写一个程序来检查给定的句子是否为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");
}
答案 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))