试图检查字符串是否包含特殊字符或小写java

我正试图让这个正则表达式行工作,但它们似乎没有工作(我不能打印出“匹配”。

我的目标是从Scanner读取一个字符串,然后运行此function。 如果字符串具有小写值或特殊字符,那么我想调用无效函数然后返回NULL。 然后在isValid()方法中,我将返回false并结束。

如果它包含NUMBERS和UPPERCASE字符,我只想返回字符串,以便它可以做其他事情。

我似乎无法打印出“匹配”。 我确信我做得对,这真让我感到沮丧,我一直在检查论坛的方式不同,但似乎都没有。

谢谢您的帮助。

public static String clean(String str){ String regex = "az~@#$%^&*:;.,/}{+"; if (str.matches("[" + regex + "]+")){ printInvalidString(str); System.out.println("matches"); } else{ return str; } return null; } public static boolean isValid(String validationString){ //clean the string validationString = clean(validationString); if (validationString == null){ return false; } 

matches将从Special charactersstart尝试匹配。如果在start时没有lowercaseSpecial characters ,它将fail .find或只是做出肯定的断言。

 ^[A-Z0-9]+$ 

如果这passes matches passes给你一个有效的字符串。

要匹配数字和大写字符,请使用:

 ^[\p{Lu}\p{Nd}]+$ `^` ... Assert position is at the beginning of the string. `[` ... Start of the character class `\p{Lu}` ... Match an "uppercase letter" `\p{Nd}` ... Match a "decimal digit" `]` ... End of the character class `+` ... Match between 1 and unlimited times. `$` ... Assert position is at the end of the string. 

转义的java字符串版本
of: az~@#$%^&*:;<>.,/}{+
是: "az~@#\\$%\\^&\\*:;<>\\.,/}\\{\\+"

在检查具有长模式的字符串旁边,您可以检查它是否包含大写或数字我以这种方式重写函数:

  public static String clean(String str) { //String regex = "az~@#$%^&*:;<>.,/}{+"; Pattern regex=Pattern.compile("[^A-Z0-9]"); if (str.matches(".*" + regex + ".*")) { printInvalidString(str); System.out.println("matches"); } else { return str; } return null; } 

您的正则表达式将匹配包含无效字符的字符串。 因此,包含有效和无效字符的字符串将与正则表达式不匹配。

validation字符串会更容易:

 if (str.matches([\\dA-Z]+)) return str; else printInvalidString(str);