我试图让这个正则表达式的线条起作用,但它们似乎无法正常工作(我无法将其打印出来"匹配"。
我的目标是从Scanner读取一个字符串,然后运行此功能。如果字符串具有小写值或特殊字符,那么我想调用无效函数然后返回NULL。然后在isValid()方法中,我将它返回false并结束。
如果它包含NUMBERS和UPPERCASE字符,我只想返回字符串,以便它可以做其他事情。
我似乎无法将其打印出来"匹配"。我确定我这样做是对的,这真让我感到沮丧,我一直在以不同的方式检查论坛,但似乎都没有。
感谢您的帮助。
public static String clean(String str){
String regex = "a-z~@#$%^&*:;<>.,/}{+";
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;
}
答案 0 :(得分:4)
matches
会尝试从start
字符串进行匹配。如果start
没有lowercase
或Special characters
它将会fail
。使用.find
或简单地做出肯定的断言。
^[A-Z0-9]+$
如果此passes
matches
为您的有效字符串。
答案 1 :(得分:2)
要匹配数字和大写字符,请使用:
^[\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:a-z~@#$%^&*:;<>.,/}{+
是:"a-z~@#\\$%\\^&\\*:;<>\\.,/}\\{\\+"
答案 2 :(得分:1)
除了用长模式检查字符串旁边你可以检查它是否包含大写或数字我以这种方式重写函数:
public static String clean(String str) {
//String regex = "a-z~@#$%^&*:;<>.,/}{+";
Pattern regex=Pattern.compile("[^A-Z0-9]");
if (str.matches(".*" + regex + ".*")) {
printInvalidString(str);
System.out.println("matches");
} else {
return str;
}
return null;
}
答案 3 :(得分:-1)
您的正则表达式将匹配仅包含无效字符的字符串。因此,包含有效和无效字符的字符串将与正则表达式不匹配。
验证字符串会更容易:
if (str.matches([\\dA-Z]+)) return str;
else printInvalidString(str);