我试图找出一个电话号码是否符合格式(xxx)xxx-xxxx,其中x是一个数字。首先,我有长度的程序和'(',')'和' - '。当我输入不起作用的东西时,我得到逻辑输出。但是,当我输入格式正确的数字时,我的程序不会返回任何内容。
import java.util.Scanner;
public class Program04 {
public static void main(String args[])
{
Scanner stdIn = new Scanner(System.in);
String pN;
System.out.print("Please enter a phone number (ddd)ddd-dddd :");
pN = stdIn.nextLine();
char a = pN.charAt(1);
char b = pN.charAt(2);
char c = pN.charAt(3);
char d = pN.charAt(5);
char e = pN.charAt(6);
char f = pN.charAt(7);
char g = pN.charAt(9);
char h = pN.charAt(10);
char i = pN.charAt(11);
char j = pN.charAt(12);
if (pN.length() == 13 && pN.charAt(0)=='(' && pN.charAt(4)== ')' && pN.charAt(8)=='-')
{
if (a>=0 && a<=9)
{
if (b>=0 && b<=9)
{
if (c>=0 && c<=9)
{
if (d>=0 && d<=9)
{
if (e>=0 && e<=9)
{
if (f>=0 && f<=9)
{
if (g>=0 && g<=9)
{
if (h>=0 && h<=9)
{
if (i>=0 && i<=9)
{
if (j>=0 && j<=9)
{
System.out.print("This is a valid phone number!");
}
}
}
}
}
}
}
}
}
}
}
else System.out.println("Not a vaid phone number.");
}
}
答案 0 :(得分:2)
使用模式匹配(正则表达式)进行验证更容易:
...
pN = stdIn.nextLine();
System.out.println(pN.matches("\\(\\d{3}\\)\\d{3}-\\d{4}"));
即使你想让它检查每个字符是否是一个数字,使用如此多的嵌套if不是要走的路。相反,定义一个应用检查的简单方法,例如:
private static boolean isDigit(char x) {
return x>=0 && x<=9;
}
然后执行:
if ( isDigit(a) && isDigit(b) && ...) {
return true;
}
else {
return false;
}
答案 1 :(得分:0)
如果您不允许使用RegEx
或者说它太难理解,请尝试通过循环内的简单switch
简化嵌套if,它是更强大的可读性和维护性是最简单:
public static void main(String[] args) {
String pn = scan.nextLine();
boolean valid = true;
if (pn.length() == 13){
for (int i = 0 ; i < 13 ; i++){
switch(i){
case 0 : valid = pn.charAt(0) == '(';break;
case 4 : valid = pn.charAt(4) == ')';break;
case 8 : valid = pn.charAt(8) == '-';break;
default : valid = Character.getNumericValue(pn.charAt(i)) >= 0 && Character.getNumericValue(pn.charAt(i))<= 9 ; break;
}
if (!valid) break;
}
if (!valid) System.out.println("Invalid number");
}else{
valid = false;
System.out.println("Invalid length");
}
if (valid){
System.out.println(pn + " is a valid telephone number");
}
}
另外,为避免使用char的ASCII值,请尝试使用Character.getNumericValue(Char c)
方法。它会返回一个numeric
,您可以将其用于测试,如上所述。
答案 2 :(得分:0)
在这种情况下最好使用正则表达式:
您可以使用以下内容:
String pattern = "(\\(\\d{3}\\)\\d{3}-\\d{4})";
Pattern r = Pattern.compile(pattern);
pN = stdIn.nextLine();
Matcher m = r.matcher(pN);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
} else {
System.out.println("NO MATCH");
}