public boolean checkFormat(String username){
ArrayList<Character> charList = new ArrayList<Character>();
Collections.addAll(charList, '!', '$', '#', '@');
//Check for special Character
boolean containsSpecial = false;
for(Character character: charList) {
if (username.contains(Character.toString(character))) {
containsSpecial = true;
}
}
//Check for Letters
int numberCharacters = 0;
if(containsSpecial){
for(int i=0; i<username.length();i++){
String symbol = String.valueOf(username.charAt(i));
//REGEX pattern Check
Pattern pattern = Pattern.compile("[A-z]");
Matcher matcher = pattern.matcher(symbol);
if(matcher.matches()){
numberCharacters++;
System.out.println("Match: " + numberCharacters);
}
}
}
if(numberCharacters>2){
return true;
}
else {
return false;
}
}
这段代码是什么意思?它说用户名应该至少3个字符对吗?因为无论何时我输入janice作为用户名我都会得到错误的用户名格式不正确
答案 0 :(得分:0)
输入"janice"
返回false
,因为当输入不包含特殊字符时,计数循环根本不会执行,numberCharacters
仍然设置为0。
您发布的代码对于它应该执行的操作非常低效。您可以尝试这样的事情:
public boolean checkFormat(String username){
final int len = username.length();
int charCount = 0;
for (int i = 0; i < len; i++) {
final char c = Character.toLowerCase(username.charAt(i));
if (c >= 'a' && c <= 'z') {
charCount++;
}
}
return charCount > 2;
}
当然,还有其他方法可以做到这一点。这只是一种可能的方法。
目前尚不清楚您为特殊字符设想的角色,但如果您只想检查是否存在至少一个特殊字符,则可以按如下方式修改上述内容:
private static final Pattern SPECIALS = Pattern.compile("[!$#@]");
public boolean checkFormat(String username) {
if (!SPECIALS.matcher(username).find()) {
return false;
}
... // the logic as before
}
当然,如果您的目标是拒绝包含任何特殊字符的字符串,请颠倒if
测试的意义。
顺便说一句:如果你想使用正则表达式,你应该知道正则表达式[A-z]
代表一个包含许多特殊字符的字符类。 (查阅ASCII或Unicode代码表以查看哪些代码。)如果要测试字母字符,请使用[A-Za-z]
或仅[a-z]
并将输入字符串转换为小写字母或设置不区分大小写模式的标志。