【问题标题】:Why Phone Number validate without regEx giving dead code in java为什么电话号码验证没有regEx在java中给出死代码
【发布时间】:2020-10-26 19:06:34
【问题描述】:

显示死代码的索引增量为什么会这样?在添加特殊字符条件之前它工作正常,没有显示死代码,我也想验证特殊字符条件。

public class ValidatePhoneNumber {

void validatePhoneNumber(String pNumber) {

    // 1st Case - +91 9765463742 have to check for + sign
    boolean flag = false;
    String specialCharacter = "!@#$%^&*()-/`~:<>/?|=.,";
    if (pNumber.startsWith("+") && pNumber.length() == 14) {

        for (int index = 1; index < pNumber.length(); index++) {
            if ((Character.isDigit((pNumber.charAt(index))) || Character.isSpaceChar((pNumber.charAt(index))))
                        && (!(specialCharacter.contains(Character.toString(pNumber.charAt(index)))))
                            && (!(Character.isLetter(pNumber.charAt(index))))) {
        
                flag = true;
            }
             else
                System.out.println(pNumber.charAt(index) + " " + pNumber + " Number is Invalid");
            flag = false;
            break;
        }
        if (flag == true) {
            System.out.println("Number " + pNumber + " is Valid");
        }
    }


public static void main(String[] args) {
    ValidatePhoneNumber phoneNumber = new ValidatePhoneNumber();
    phoneNumber.validatePhoneNumber("+91 975644@742");
    phoneNumber.validatePhoneNumber("09765463742");

【问题讨论】:

  • 因为你break 在第一次迭代之后立即,所以index++ 永远无法到达。
  • @QBrute 如果我删除 break 首先显示无效,但在下一次迭代标志变为真并且显示数字有效。
  • 那么您只是错过了else 周围的花括号。我认为休息属于那个
  • @QBrute 感谢您的快速响应,现在已解决
  • 为什么不检查每个字符是数字还是空格?额外的检查(特殊字符或字母)似乎是多余的。

标签: java loops validation if-statement


【解决方案1】:

问题是因为下面的break 语句将在第一次迭代后立即中断for 循环,因此index++ 将永远没有机会运行:

else
    System.out.println(pNumber.charAt(index) + " " + pNumber + " Number is Invalid");
flag = false;
break;

你应该写成:

void validatePhoneNumber(String pNumber) {
    // 1st Case - +91 9765463742 have to check for + sign
    boolean flag = false;
    int index;
    String specialCharacter = "!@#$%^&*()-/`~:<>/?|=.,";
    if (pNumber.startsWith("+") && pNumber.length() == 14) {
        for (index = 1; index < pNumber.length(); index++) {
            if (!(Character.isDigit(pNumber.charAt(index)) || Character.isSpaceChar(pNumber.charAt(index)))
                    && (specialCharacter.contains(Character.toString(pNumber.charAt(index)))
                            || Character.isLetter(pNumber.charAt(index)))) {
                flag = true;
                break;
            }
        }
    } else {
        flag = true;
    }
    if (!flag) {
        System.out.println("Number " + pNumber + " is Valid");
    } else {
        System.out.println(pNumber + " Number is Invalid");
    }
}

请注意,我已将 System.out.println(pNumber.charAt(index) + " " + pNumber + " Number is Invalid"); 移出循环,以便此消息仅打印一次。

测试代码:

ValidatePhoneNumber phoneNumber = new ValidatePhoneNumber();
phoneNumber.validatePhoneNumber("+91 975644@742");
phoneNumber.validatePhoneNumber("+91 9765463742");

输出:

+91 975644@742 Number is Invalid
Number +91 9765463742 is Valid

【讨论】:

    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    相关资源
    最近更新 更多