Java 检查字符串是否仅包含一组字母
我试图检查一个单词是否只包含一组字母,如I、O、S、H和X 假设用户输入:SSHX,输出将是yes,但如果用户输入SHEXX,输出将是NOJava 检查字符串是否仅包含一组字母,java,string,char,Java,String,Char,我试图检查一个单词是否只包含一组字母,如I、O、S、H和X 假设用户输入:SSHX,输出将是yes,但如果用户输入SHEXX,输出将是NO public static void main(String[] args) { Scanner sc = new Scanner(System.in); String word = sc.next(); word = word.toUpperCase(); int length = word.length();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String word = sc.next();
word = word.toUpperCase();
int length = word.length();
char letter = 0;
for (int counter = 0; counter < length; counter++) {
letter = word.charAt(counter);
}
if (letter != 'I' && letter != 'O' && letter != 'S' && letter != 'H' && letter != 'Z' && letter != 'X' && letter != 'N') {
System.out.print("NO");
} else {
System.out.print("YES");
}
}
publicstaticvoidmain(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
字符串字=sc.next();
word=word.toUpperCase();
int length=word.length();
字符字母=0;
用于(int计数器=0;计数器<长度;计数器++){
字母=word.charAt(计数器);
}
如果(字母!='I'和字母!='O'和字母!='S'和字母!='H'和字母!='Z'和字母!='X'和字母!='N'){
系统输出打印(“否”);
}否则{
系统输出打印(“是”);
}
}
使用正则表达式:
if (word.matches("[HIOSX]+"))
System.out.println("YES");
else
System.out.println("NO");
使用一个
一些额外资源:
除了使用正则表达式的明显答案之外,考虑使用谷歌的番石榴使这个非常简单:
if(CharMatcher.anyOf("HIOSX").matchesAllOf(word)) {
} ...
你有一个很好的解决方法。问题是,您实际上并没有检查每个字母,所以您需要在for循环中进行检查,否则您将只检查最后一个字母。但是,您不能打印“是”,因为您只想在所有字母都是“是”时打印它,因此您也可以使用布尔值来检查,例如:
boolean isMatch = true;
for (int counter = 0; counter < strLength && isMatch; counter++) {
letter = word.charAt(counter);
if (letter != 'I' && letter != 'O' && letter != 'S' && letter != 'H' && letter != 'Z' && letter != 'X' && letter != 'N') {
System.out.print("NO");
isMatch = false;
}
}
if (isMatch) {
System.out.print("YES");
}
首先,您应该像这样初始化字母:
char字母='0'代码>而不是0
其次,for循环使用得很糟糕,请尝试以下代码:
boolean isInSet;
for (int counter = 0; counter < strLength; counter++)
{
letter = word.charAt(counter);
if (letter != 'I' && letter != 'O' && letter != 'S' && letter != 'H' && letter != 'Z' && letter != 'X' && letter != 'N')
{
isInSet=false;
counter=strlength; //end loop
}
else
{
isInSet=true;
}
}
if(isInSet=true)
{
System.out.print("YES");
}
else
{
System.out.print("NO");
}
布尔isInSet;
用于(int计数器=0;计数器
现在,循环将在字符串上循环,并检查是否每个字符都在集合中,如果不是,则循环结束,布尔值设置为false,这将导致无输出您的正则表达式将只匹配一个字符的字符串(确实应该在列出的字符中)。您需要添加一个*
,使其与多字符单词匹配。谢谢。实际上,它应该是一个+
,以防止空字符串匹配。从另一个答案复制粘贴的注释:您的正则表达式将只匹配一个字符的字符串(确实应该在列出的字符中)。你需要添加一个*
来匹配多字符单词。如果你注意到的话,我是第一个回答的。谢谢你的建议。我没有注意到,对不起。。。“复制/粘贴”部分用于另一个答案,然后…:)正则表达式是最简单的解决方案,但是如果你想知道为什么你的正则表达式不起作用,那是因为你没有在for
循环中测试任何东西。您可以在调试器中自己看到这一点。我认为您需要另一种方式:CharMatcher.anyOf(“HIOSX”).matchesAllOf(word)
if (word.matches("[HIOSX]*")) {
System.out.print("YES");
} else {
System.out.print("NO");
}
boolean isInSet;
for (int counter = 0; counter < strLength; counter++)
{
letter = word.charAt(counter);
if (letter != 'I' && letter != 'O' && letter != 'S' && letter != 'H' && letter != 'Z' && letter != 'X' && letter != 'N')
{
isInSet=false;
counter=strlength; //end loop
}
else
{
isInSet=true;
}
}
if(isInSet=true)
{
System.out.print("YES");
}
else
{
System.out.print("NO");
}