我正在尝试构建一个计算成绩的程序。其中的一部分要求以正确的格式(A #########)输入学生ID。我要测试的错误是:输入是否为“ quit” ?、第一个字符为“ A” ?、总长度为9个字符?,最后8个字符为数字?以及最后8个数字是否为0?我弄清楚了前三个条件,但我不知道如何检查后两个条件。我还需要包含NumberFormatException。我的代码当前无法正常运行,但是到目前为止,这是我的工作:
public static String getStudentID(String sid) {
boolean goodval = false;
long snum = Long.parseLong(sid.substring(1));
do{
try{
if (sid.equals("quit")) {
goodval = true;
} else if (sid.charAt(0) != 'A') {
System.out.println("Student ID must start with 'A'");
goodval = false;
} else if (sid.length()!=9) {
System.out.println("Student ID must be 9 characters long");
goodval = false;
} else if (Long.parseLong(sid.substring(1))) {
goodval = false;
} else {
goodval = true;
}
} catch (NumberFormatException e){
System.out.println("The last part of the ID" + sid.substring(1) + " was not a number.");
sc.nextLine();
}
} while (goodval = false);
return sid;
}
答案 0 :(得分:0)
此正则表达式应符合所有要求 : [A] {1} \ d {8}(?<!A00000000)|退出
在此处进行测试:http://regexstorm.net/tester?p=%5bA%5d%7b1%7d%5cd%7b8%7d%28%3f%3c!A00000000%29%7cquit&i=A12345678
答案 1 :(得分:0)
String
类具有方法调用length()
,该方法调用返回一个整数,该整数表示String中的字符数。字符串的最后八个字符将通过length() - 1
索引到length() - 8
。
Character类具有一个感兴趣的静态方法isDigit(),如果字符是数字,则该方法将返回true
。
我不确定您要如何构建代码,但是下面的示例将为您分解备选方案。
for(int counter = 0; counter < sid.length(); counter++)
{
if(Character.isDigit(sid.charAt(counter))
{
if(sid.charAt(counter) == '0')
{
// it's a digit AND it's a zero
}
else
{
// it's a digit, but not a zero
}
}
else
{
// it's alpha or whitespace
}
}