我有一个问题,我正在尝试获取一个参数来匹配格式'Uddd',其中'U'必须是字母U,'ddd'可以是0-9之间的任何3位数。
我目前的代码:
//borrow method
public boolean borrow(String borrowerID)
{
//if the borrower ID matches the format 'Uddd'
if (borrowerID.matches("U([0-9]{3})"))
{
//if the status is available
if (status == 'A')
{
this.borrowerID = borrowerID;
this.status = 'O';
this.dateBorrowed = currentDate;
return true;
}
//is not available
else
{
return false;
}
}
//does not match format
else
{
return false;
}
}
由于某种原因,它没有正确验证。当我尝试输入'1'作为参数时,它仍然返回true。
我有什么遗失的吗?
答案 0 :(得分:4)
如果输入为true
,则该方法不可能返回"1"
。我只能建议您确保 传递"1"
并且该方法是被调用的方法。
可以通过顶部的简单调试语句来完成,例如:
System.out.println ("Calling correct function with [" + borrowerId + "]");
在功能开始时。
我还建议进行一些清理工作,使函数更容易编码和读取,如下所示:
// borrow method
public boolean borrow(String borrowerID)
{
// Temp debug statement.
// System.out.println ("borrow [" + borrowerId + "]");
// "Not available" or "invalid borrower" means reject request.
if (status != 'A')
return false;
if (! borrowerID.matches("U([0-9]{3})"))
return false;
// Okay to borrow.
this.borrowerID = borrowerID;
this.status = 'O';
this.dateBorrowed = currentDate;
return true;
}
这比所有return-else-do-something
构造要清晰得多,它遵循"快速失败"范例
有些人往往不喜欢多个回归点,但这通常是因为他们不理解为什么他们被认为是坏的(意大利面条代码)。使用这样的短函数,它不会造成问题。
答案 1 :(得分:2)
我的正则表达式取得了良好的效果:" 1" - > false," UU123" - >假," U1234" - >假," U132" - >真。
但您可以使用\ d而不是[0-9]:
borrowerID.matches("U(\\d{3})")
答案 2 :(得分:1)
实际上这是不可能的。当输入1时它不会返回true而是返回false。可能是你的状态等于'A'应该是返回true的理由
String borrowerID="1";
boolean matches = borrowerID.matches("U([0-9]{3})");
System.out.println(matches);
输出>>
false
如果你只是想找到正则表达式匹配或者不使用这个。或者把一个sout并检查状态值。确定它应该是A
if (borrowerID.matches("U([0-9]{3})")) {
return true;
} else {
return false;
}
答案 3 :(得分:0)
regex
System.out.println("U888".matches("U([0-9]{3})"));
输出true
System.out.println("1".matches("U([0-9]{3})"));
输出false
尝试debug
您的代码,breakpoint
borrow function
if (borrowerID.matches("U([0-9]{3})") && (status == 'A')) {
this.borrowerID = borrowerID;
this.status = 'O';
this.dateBorrowed = currentDate;
return true;
} else {
return false;
}
您还可以优化您的喜欢
status
我不理解正在行动,你正在检查{{1}}再次发现' A'并在内部分配' 0',它有意义吗?(无论如何它取决于你)