试图检查字符串是否包含特殊字符或小写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 characters
的start
尝试匹配。如果在start
时没有lowercase
或Special 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);