我试图检查一个单词是否只包含一组字母,如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();
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");
}
}
Run Code Online (Sandbox Code Playgroud)
ddm*_*mps 12
你有一个很好的解决方法.问题是你实际上没有检查每个字母,所以你需要在for循环中进行检查,否则你只会检查最后一个字母.但是你不能打印"YES",因为如果所有字母都是肯定的,你只想打印它,所以你也可以使用布尔值来检查它,如下:
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");
}
Run Code Online (Sandbox Code Playgroud)
但是,正如其他人指出的那样,使用正则表达式更有效(而且这个正则表达式可用于你想要的东西.星号表示括号内的零或多个.):
if (word.matches("[HIOSX]*")) {
System.out.print("YES");
} else {
System.out.print("NO");
}
Run Code Online (Sandbox Code Playgroud)
使用正则表达式.
String regex = "[OSXHI]*";
String string = "SOMETHING";
Matcher matcher = Pattern.compile(regex).matcher(string);
if (matcher.find())
{
String match = matcher.group(1);
System.out.println(match);
}
Run Code Online (Sandbox Code Playgroud)
一些额外的资源:
除了使用正则表达式的明显答案之外,请考虑使用Google的Guava API来实现这一点:
if(CharMatcher.anyOf("HIOSX").matchesAllOf(word)) {
} ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32620 次 |
| 最近记录: |