Java—使用“Java”;。包括「;以相反的方式

Java—使用“Java”;。包括「;以相反的方式,java,contains,Java,Contains,我希望能够打印一个不包含单词“Java”、“Code”或“string”的字符串,尽管我不确定如何实现这一点,因为我认为这可以通过使用“!”来实现(不是)。然而,事实并非如此,因为尽管包含了我想禁止的单词,字符串仍然被打印出来 任何关于如何实现这一点的建议都将不胜感激,提前感谢 System.out.println("Type in an input, plez?"); String userInput6 = inputScanner.nextLine(); if (!userInput6.t

我希望能够打印一个不包含单词“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'.");
} 
我认为这可以通过使用“!”来实现(不是)

是的。您只是没有将其正确应用于您的情况:

您可以从以下语句开始:

userInput6.toLowerCase().contains("java") ||
userInput6.toLowerCase().contains("code") ||
userInput6.toLowerCase().contains("string")
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);
} 
它检查输入是否包含这些内容,并且您希望否定此语句

您可以将整个语句用括号(
()
)括起来,然后将其取反:

或者应用于析取的否定,即
a | | b
的否定为
!a&&!b

因此,如评论中所述,您需要

!userInput6.toLowerCase().contains("java") &&
!userInput6.toLowerCase().contains("code") &&
!userInput6.toLowerCase().contains("string")
相反

您的语句只是检查字符串是否不包含至少一个子字符串。这意味着只有当字符串包含所有这些字符串时,检查才会失败。使用
|
,如果任何操作数为
true
,则整个语句为
true

此外,还指出您要检查的字符串应该完全是小写的。否则,您将检查
.toLowerCase
d字符串是否包含大写字符,该字符总是
false

一种更简单的方法是颠倒您的
if
语句:

userInput6.toLowerCase().contains("java") ||
userInput6.toLowerCase().contains("code") ||
userInput6.toLowerCase().contains("string")
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);
} 
  • 由于您使用的是逻辑OR,只要
    包含的一个
    检查为true,整个条件都为true。您希望所有检查都为true,因此需要使用逻辑AND(
    &&

  • 正如@mk指出的,您还有另一个问题。看看:

    userInput6.toLowerCase().contains("Java")
    
    将字符串小写,然后对照包含大写的字符串进行检查。不过,您刚刚删除了所有大写字母,因此检查将始终失败

此外,您还可以使用regexp:)

或者直接将其内联:

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

您需要AND(&&),而不是OR(| |)。您要检查是否不包含所有内容,而不是至少包含其中一项内容。
!userInput6.toLowerCase().contains(“Java”)
-
“Java”
在您将其转换为小写后包含大写字符(与其他调用相同)。您了解
toLowerCase()
的功能吗?你为什么要用它?
toLowerCase().contains(“code”)
永远是假的“@StephenP,是的,但只剩下一个了。原来的问题解决了:)