Java - 以相反的方式使用“.contains”
Java - using ".contains" in the opposite manner
我希望能够打印不包含单词 "Java"、"Code" 或 "String" 的字符串,但我不确定如何实现这一点,因为我认为这可以通过使用“!”来实现(不是)。然而,情况并非如此,因为尽管包含了我要禁止的字词,但字符串仍会打印出来。
任何关于如何实现这一目标的建议将不胜感激,在此先感谢。
System.out.println("Type in an input, plez?");
String userInput6 = inputScanner.nextLine();
if (!userInput6.toLowerCase().contains("Java") || !userInput6.toLowerCase().contains("Code") || !userInput6.toLowerCase().contains("String")) {
System.out.println("I see your does not string contain 'Java', 'Code' or 'String, here is your string:- " + userInput6);
} else {
System.out.println("Your string contains 'Java, 'Code' or 'String'.");
}
I thought this would be achieved by using '!' (NOT)
是的。您只是没有正确地将它应用到您的情况:
你从这个声明开始:
userInput6.toLowerCase().contains("java") ||
userInput6.toLowerCase().contains("code") ||
userInput6.toLowerCase().contains("string")
检查输入是否包含 任何,而您希望否定此语句。
您可以将整个语句括在括号中 (()
) 并否定 that:
!(userInput6.toLowerCase().contains("java") ||
userInput6.toLowerCase().contains("code") ||
userInput6.toLowerCase().contains("string"))
或将 DeMorgan's law 应用于析取的否定,它表明 a || b
的否定是 !a && !b
.
因此,正如评论中 Carcigenicate 所述,您需要
!userInput6.toLowerCase().contains("java") &&
!userInput6.toLowerCase().contains("code") &&
!userInput6.toLowerCase().contains("string")
相反。
您的语句只是检查字符串是否不包含 至少一个 这些子字符串。这意味着只有当字符串包含这些字符串的 all 时,检查才会失败。对于 ||
,如果任何操作数是 true
,则整个语句是 true
.
此外,mkobit 指出您要检查的字符串应该完全小写。否则,您正在检查 .toLowerCase
d 字符串是否包含大写字符 - always false
.
一个更容易想到的方法可能是颠倒你的 if
语句:
if (userInput6.toLowerCase().contains("Java") ||
userInput6.toLowerCase().contains("Code") ||
userInput6.toLowerCase().contains("String")) {
System.out.println("Your string contains 'Java, 'Code' or 'String'.");
} else {
System.out.println("I see your does not string contain 'Java', 'Code' or 'String, here is your string:- " + userInput6);
}
由于您使用的是逻辑或,一旦您的 contains
检查为真,则整个条件为真。您希望所有检查都为真,因此您需要使用逻辑 AND (&&
) 而不是
正如@mk 指出的那样,您还有另一个问题。看:
userInput6.toLowerCase().contains("Java")
您将字符串小写,然后对照包含大写字母的字符串进行检查。你只是删除了所有大写字母,所以检查总是失败。
此外,您可以使用正则表达式:)
boolean notContains(String in) {
return !Pattern.compile(".*((java)|(code)|(string)).*")
.matcher(in.toLowerCase())
.matches();
}
或者直接内联它:
System.out.println("Type in an input, plez?");
String userInput6 = inputScanner.nextLine();
if (!Pattern.compile(".*((java)|(code)|(string)).*")
.matcher(userInput6.toLowerCase())
.matches()) {
System.out.println("I see your does not string contain 'Java', 'Code' or 'String, here is your string:- " + userInput6);
} else {
System.out.println("Your string contains 'Java, 'Code' or 'String'.");
}
我希望能够打印不包含单词 "Java"、"Code" 或 "String" 的字符串,但我不确定如何实现这一点,因为我认为这可以通过使用“!”来实现(不是)。然而,情况并非如此,因为尽管包含了我要禁止的字词,但字符串仍会打印出来。
任何关于如何实现这一目标的建议将不胜感激,在此先感谢。
System.out.println("Type in an input, plez?");
String userInput6 = inputScanner.nextLine();
if (!userInput6.toLowerCase().contains("Java") || !userInput6.toLowerCase().contains("Code") || !userInput6.toLowerCase().contains("String")) {
System.out.println("I see your does not string contain 'Java', 'Code' or 'String, here is your string:- " + userInput6);
} else {
System.out.println("Your string contains 'Java, 'Code' or 'String'.");
}
I thought this would be achieved by using '!' (NOT)
是的。您只是没有正确地将它应用到您的情况:
你从这个声明开始:
userInput6.toLowerCase().contains("java") ||
userInput6.toLowerCase().contains("code") ||
userInput6.toLowerCase().contains("string")
检查输入是否包含 任何,而您希望否定此语句。
您可以将整个语句括在括号中 (()
) 并否定 that:
!(userInput6.toLowerCase().contains("java") ||
userInput6.toLowerCase().contains("code") ||
userInput6.toLowerCase().contains("string"))
或将 DeMorgan's law 应用于析取的否定,它表明 a || b
的否定是 !a && !b
.
因此,正如评论中 Carcigenicate 所述,您需要
!userInput6.toLowerCase().contains("java") &&
!userInput6.toLowerCase().contains("code") &&
!userInput6.toLowerCase().contains("string")
相反。
您的语句只是检查字符串是否不包含 至少一个 这些子字符串。这意味着只有当字符串包含这些字符串的 all 时,检查才会失败。对于 ||
,如果任何操作数是 true
,则整个语句是 true
.
此外,mkobit 指出您要检查的字符串应该完全小写。否则,您正在检查 .toLowerCase
d 字符串是否包含大写字符 - always false
.
一个更容易想到的方法可能是颠倒你的 if
语句:
if (userInput6.toLowerCase().contains("Java") ||
userInput6.toLowerCase().contains("Code") ||
userInput6.toLowerCase().contains("String")) {
System.out.println("Your string contains 'Java, 'Code' or 'String'.");
} else {
System.out.println("I see your does not string contain 'Java', 'Code' or 'String, here is your string:- " + userInput6);
}
由于您使用的是逻辑或,一旦您的
contains
检查为真,则整个条件为真。您希望所有检查都为真,因此您需要使用逻辑 AND (&&
) 而不是正如@mk 指出的那样,您还有另一个问题。看:
userInput6.toLowerCase().contains("Java")
您将字符串小写,然后对照包含大写字母的字符串进行检查。你只是删除了所有大写字母,所以检查总是失败。
此外,您可以使用正则表达式:)
boolean notContains(String in) {
return !Pattern.compile(".*((java)|(code)|(string)).*")
.matcher(in.toLowerCase())
.matches();
}
或者直接内联它:
System.out.println("Type in an input, plez?");
String userInput6 = inputScanner.nextLine();
if (!Pattern.compile(".*((java)|(code)|(string)).*")
.matcher(userInput6.toLowerCase())
.matches()) {
System.out.println("I see your does not string contain 'Java', 'Code' or 'String, here is your string:- " + userInput6);
} else {
System.out.println("Your string contains 'Java, 'Code' or 'String'.");
}