【发布时间】:2022-01-09 14:16:59
【问题描述】:
问题是检查一个有效的用户名:
条件是:
1.用户名由8到30个字符组成。如果用户名包含少于 8 个或多于 30 个字符,则该用户名无效。
2.用户名只能包含字母数字字符和下划线(_)。字母数字字符描述由小写字符 [a-z]、大写字符 [A-Z] 和数字 [0-9] 组成的字符集。
3.用户名的第一个字符必须是字母字符,即小写字符[a-z]或大写字符[A-Z]。
示例输入:
8
朱莉娅
萨曼莎
萨曼莎_21
1萨曼莎
萨曼莎?10_2A
朱莉娅Z007
朱莉娅@007
_Julia007
样本输出:
无效
有效
有效
无效
无效
有效
无效
无效
在某些情况下我得到错误的输出。
对于输入: JuliaZ007 ,我应该得到 Valid 但得到 Invalid。其余都是正确的。
我能知道代码有什么问题吗?
https://www.hackerrank.com/challenges/valid-username-checker/problem?isFullScreen=false
import java.io.*;
import java.util.*;
public class Solution {
private static final Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
int flag=1;
int n = Integer.parseInt(scan.nextLine());
while (n-- != 0) {
String userName = scan.nextLine();
char a[] = userName.toCharArray();
String specialCharactersString = "!@#$%&*()'+,-./:;<=>?[]^`{|}";
for (int i=0;i<userName.length();i++)
{
char ch = userName.charAt(i);
if(specialCharactersString.contains(Character.toString(ch)) && Character.isLetterOrDigit(ch)==false)
{
flag=0;
}
}
if (userName.length()>=8 && userName.length()<=30 && Character.isLetter(a[0])==true && flag==1) {
System.out.println("Valid");
} else {
System.out.println("InValid");
}
}
}
}
【问题讨论】:
-
"在某些情况下我得到错误的输出" - 哪些?预期的输出和观察到的输出是什么?请edit发帖并添加这些信息。
-
@Turing85 对于输入:JuliaZ007,我应该得到 Valid 但得到 Invalid。
-
Hackerrank 问题需要一个带有正则表达式的解决方案。
-
@hfontanez 是的,但我想尝试不使用它。你能帮忙吗?
-
@Suhas 我为 HackerRank 想出的正则表达式与 JavaMan 在他的回答中使用的相同。