Java 检查字符串的特定格式是否在特定参数之间
我已经读了好几篇文章,找不到为什么我的代码不能正常工作 我必须要求用户通过控制台输入以下格式的字符串 [国会议员][人数] 其中字母必须是A、B、C、D、E或F,数字必须介于1和6之间 这是我的密码Java 检查字符串的特定格式是否在特定参数之间,java,Java,我已经读了好几篇文章,找不到为什么我的代码不能正常工作 我必须要求用户通过控制台输入以下格式的字符串 [国会议员][人数] 其中字母必须是A、B、C、D、E或F,数字必须介于1和6之间 这是我的密码 while ((x.length() != 2) || (x.charAt(0)>='F' && x.charAt(0)<='A') || (Character.getNumericValue(x.charAt(1))>=6 && C
while ((x.length() != 2) || (x.charAt(0)>='F' && x.charAt(0)<='A') || (Character.getNumericValue(x.charAt(1))>=6 && Character.getNumericValue(x.charAt(1))<=1))
{
System.out.println(msg);
x = (new Scanner(System.in)).nextLine();
}
while((x.length()!=2)| |(x.charAt(0)>='F'&&x.charAt(0)=6&&Character.getNumericValue(x.charAt(1))我正在使用&&when我应该使用| |,已修复
谢谢既然OP回答了自己的问题,我就复制粘贴@lospejos的推荐,我认为这是一个比OP提出的更好的解决方案(为了子孙后代)
使用助手方法
boolean matchesFormat(String input) {
return input.matches("[A-F][1-6]");
}
您正在使用&&当您应该使用| |。(x.charAt(0)='F'&&x.charAt(0)@JBNizet谢谢,我在另一个条件下也改变了这一点,并且工作了。我建议您使用这样的正则表达式:如果(x.matches([a-F][1-6]){/*ok*/}否则{/*notok*/}
您可能不想使用Character.getNumericValue
。它将接受表示罗马数字的Unicode字符(例如表示1的Ⅰ)
boolean matchesFormat(String input) {
return input.matches("[A-F][1-6]");
}