Java 检查SSN编号是否正确
我搜索了这个问题,从“大麋鹿沙龙”网站上得到了答案,这与我写的略有不同。网站程序如下:Java 检查SSN编号是否正确,java,Java,我搜索了这个问题,从“大麋鹿沙龙”网站上得到了答案,这与我写的略有不同。网站程序如下: if (social.length() == 11) { valid = true; // Check that the characters are valid // Valid as digits char index0 = social.charAt(0); char index1 = social.charAt(1); char index2 = social.charAt(2
if (social.length() == 11) {
valid = true;
// Check that the characters are valid
// Valid as digits
char index0 = social.charAt(0);
char index1 = social.charAt(1);
char index2 = social.charAt(2);
char index4 = social.charAt(4);
char index5 = social.charAt(5);
char index7 = social.charAt(7);
char index8 = social.charAt(8);
char index9 = social.charAt(9);
char index10 = social.charAt(10);
// Valid as hyphen
char index3 = social.charAt(3);
char index6 = social.charAt(6);
if (Character.isDigit(index0) && Character.isDigit(index1)
&& Character.isDigit(index2) && Character.isDigit(index4)
&& Character.isDigit(index5) && Character.isDigit(index7)
&& Character.isDigit(index8) && Character.isDigit(index9)
&& Character.isDigit(index10) && index3 == '-'
&& index6 == '-') {
valid = true;
}
} else
valid = false;
return valid;
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.println("Enter your Social security number as DDD-DD-
DDDD");
String str = input.nextLine();
if (str.length()==11) {
System.out.println("Invalid input");
if(Character.isDigit(str.charAt(0))&&Character.isDigit(str.charAt(1))
&&Character.isDigit(str.charAt(2))&&Character.isDigit(str.charAt(4))
&&Character.isDigit(str.charAt(5))&&Character.isDigit(str.charAt(7))
&&Character.isDigit(str.charAt(8))&&Character.isDigit(str.charAt(9))
&&Character.isDigit(str.charAt(10))
&&((str.substring(3,6)).startsWith("-")&&
((str.substring(3,6)).endsWith("-"))) {
System.out.println("The enter is valid");
}
}
else {
System.out.println("The enter is invalid");
}
}
}
矿山是这样的:
if (social.length() == 11) {
valid = true;
// Check that the characters are valid
// Valid as digits
char index0 = social.charAt(0);
char index1 = social.charAt(1);
char index2 = social.charAt(2);
char index4 = social.charAt(4);
char index5 = social.charAt(5);
char index7 = social.charAt(7);
char index8 = social.charAt(8);
char index9 = social.charAt(9);
char index10 = social.charAt(10);
// Valid as hyphen
char index3 = social.charAt(3);
char index6 = social.charAt(6);
if (Character.isDigit(index0) && Character.isDigit(index1)
&& Character.isDigit(index2) && Character.isDigit(index4)
&& Character.isDigit(index5) && Character.isDigit(index7)
&& Character.isDigit(index8) && Character.isDigit(index9)
&& Character.isDigit(index10) && index3 == '-'
&& index6 == '-') {
valid = true;
}
} else
valid = false;
return valid;
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.println("Enter your Social security number as DDD-DD-
DDDD");
String str = input.nextLine();
if (str.length()==11) {
System.out.println("Invalid input");
if(Character.isDigit(str.charAt(0))&&Character.isDigit(str.charAt(1))
&&Character.isDigit(str.charAt(2))&&Character.isDigit(str.charAt(4))
&&Character.isDigit(str.charAt(5))&&Character.isDigit(str.charAt(7))
&&Character.isDigit(str.charAt(8))&&Character.isDigit(str.charAt(9))
&&Character.isDigit(str.charAt(10))
&&((str.substring(3,6)).startsWith("-")&&
((str.substring(3,6)).endsWith("-"))) {
System.out.println("The enter is valid");
}
}
else {
System.out.println("The enter is invalid");
}
}
}
我想知道为什么我的程序出错(即使我输入123-45-6789,它也会显示“无效”)?str.substring(3,6)。endsWith(“-”)
表示从字符3到字符6的子字符串。原始字符串中的第一个字符是字符0
您的第二个破折号位于位置6,因此您应该改为执行子字符串(3,7)
更好的解决方案是使用String#charAt(int)
检查这两个字符。就像你在“大麋鹿沙龙”上找到的解决方案一样
理想的解决方案是使用正则表达式。它将允许您将多行非常难以阅读的代码转换为单个表达式:
if (str.matches("\\d{3}\\-\\d{2}\\-\\d{4}")) {
System.out.println("The enter is valid");
} else {
System.out.println("The enter is invalid");
}
此处将代码更改为此仅做一些小更改
import java.util.Scanner;
public class SSN {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.println("Enter your Social security number as DDD-DD-DDDD");
String str = input.nextLine();
if (str.length() != 11) {//use != in place of ==
System.out.println("Invalid input");
} else if (Character.isDigit(str.charAt(0)) && Character.isDigit(str.charAt(1))
&& Character.isDigit(str.charAt(2)) && Character.isDigit(str.charAt(4))
&& Character.isDigit(str.charAt(5)) && Character.isDigit(str.charAt(7))
&& Character.isDigit(str.charAt(8)) && Character.isDigit(str.charAt(9))
&& Character.isDigit(str.charAt(10))
&& (str.charAt(3) == '-') && (str.charAt(6) == '-')) {//use charAt()
System.out.println("The enter is valid");
} else {
System.out.println("The enter is invalid");
}
}
}
我也提到了这些变化
import java.util.Scanner;
public class SSN {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.println("Enter your Social security number as DDD-DD-DDDD");
String str = input.nextLine();
if (str.length() != 11) {//use != in place of ==
System.out.println("Invalid input");
} else if (Character.isDigit(str.charAt(0)) && Character.isDigit(str.charAt(1))
&& Character.isDigit(str.charAt(2)) && Character.isDigit(str.charAt(4))
&& Character.isDigit(str.charAt(5)) && Character.isDigit(str.charAt(7))
&& Character.isDigit(str.charAt(8)) && Character.isDigit(str.charAt(9))
&& Character.isDigit(str.charAt(10))
&& (str.charAt(3) == '-') && (str.charAt(6) == '-')) {//use charAt()
System.out.println("The enter is valid");
} else {
System.out.println("The enter is invalid");
}
}
}
它会很好用。 但是如果你想要最短的代码,那么就使用正则表达式 注意:下面给出的代码使用了的语法,如果您使用下面给出的代码,请相信原始作者
第一个也不起作用:它将为任何11个字符的字符串返回true,例如“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?因为我试过aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa{,
valid
被设置为true,以后再也不会返回false。@AndyTurner是的,我认为你是对的。@pawlak非常感谢!原来我犯了这么一个简单的错误。我按照你说的更改了我的程序,它运行得很好。我还没有学习正则表达式,但感谢你给我展示了这个理想的解决方案!谢谢你告诉我那!我确实发现,如果我输入12-345-6789,它既不会给我有效的指令,也不会给我无效的指令。似乎我的程序有错误。我把它改成了你的想法,现在一切似乎都好了。比你好!很好。你把@pawlak给出的答案标记为已接受,这是一件好事。必须对原始作者给予适当的信任。