java validate包含数字和搜索的字符串,以确保没有字符

时间:2016-03-02 00:38:26

标签: java string validation input

我想验证用户输入的电话号码,我需要做的第一件事是检查以确保输入字符串的长度为10,这不是我在代码中看到的问题。< / p>

现在是问题所在的地方,我还需要检查以确保没有输入任何字符,任何有关如何使用数组执行此操作的想法。我想使用Character.isLetter();但无论我如何实现它,它都不会出现。

import java.util.Scanner;
public class Example 
{
   public static void main(String[] args)
   {
      boolean isNumber = false; 
      String phoneNum = "";
      Scanner input = new Scanner(System.in);

        while(!isNumber)
        {
           System.out.print("\nEnter your 10 digit phone number (ex: 2123345657): ");         
           phoneNum = input.nextLine(); 

             /* Yes I could use nextInt(); etc.. but that would defeat the 
              purpose of this exercise */

              if(phoneNum.length() != 10)
              {
                System.out.println("\n\nBad input");
              }
              else 
                  isNumber = true;
        }

        System.out.println("\n\nPhone number is: " + phoneNum);


   }

}

我正在寻找像这样的东西。

while(!isRight)
    {
            System.out.print("\n input number: "); 
            phoneNum = input.nextLine();  

            while(i < phoneNum.length())
            {   
                if(phoneNum.length() != 10)
                {
                    System.out.println("not enough numbers");
                } 


                else if (Character.isLetter(phoneNum.charAt(i)) == true)
                {   

                    System.out.println("Sorry you can't use any thing but numbers");
                }

                else 
                    isRight = true;
                i++;
            }
    }

5 个答案:

答案 0 :(得分:1)

使用

的正则表达式
"^[0-9]{10}"  

或者必须以非零开始

"^[1-9][0-9]{9}"  

if(!phoneNum.matches("^[0-9]{10}")) {
   // ok
}

如果您想使用isLetter

然后尝试

boolean allNum = true;
for (char ch : phoneNum.toCharArray ()) {
   if (Character.isLetter (ch)) {
       allNum = false;
       break;
   }
}

答案 1 :(得分:1)

你可以在没有正则表达式的情况下完成:

boolean validate(String str) {
  if (str.length() != 10) {
    return false;
  }
  for (int i = 0; i < str.length(); ++i) {
    if (!Character.isDigit(str.charAt(i)) {
      return false;
    }
  }
  return true;
}

答案 2 :(得分:0)

您可以使用字符串正则表达式匹配来检查字符串是否为数字:

boolean numeric = phoneNum.matches("\\d+");

作为替代解决方案,如果您在项目中导入了apache commons库,则可以使用isNumeric类的StringUtils方法,例如:

StringUtils.isNumeric(phoneNum);

答案 3 :(得分:0)

你可以用这个: / *检查是数字* /

StringUtils.isNumeric(yourNumber); 

或REGEX以避免所有字符数字不同。

 `{\\d+}`

答案 4 :(得分:0)

我想发布我提出的解决方案,原因有几个,但主要是因为如果有的话,有些人遇到问题并且他们故意避免使用数组,正则表达式等等......他们可以有一个很好的例子!

import java.util.Scanner;
public class Example 
{
    public static void main(String[] args)
    {
       boolean isNumber = false; 
       String phoneNum = "";
       Scanner input = new Scanner(System.in); 

       while(!isNumber)
       {
            isNumber = true;
            System.out.print("\nEnter your 10 digit phone number (ex: 4142317534): ");
            phoneNum = input.nextLine();

            for(int i = 0; i < phoneNum.length(); i++)
            {
               if(!Character.isDigit(phoneNum.charAt(i)))
               {
                  isNumber = false;
               }
            }


            if(phoneNum.length() != 10)
            {
              isNumber = false;
            }


            if(isNumber == false)
            {
               System.out.println("\n\nInvalid format - please reenter");
            }
       }

       System.out.println("\n\nPhone Number: " + phoneNum);

    }


}

是的,它是很多代码,是的,它可以被浓缩,但更重要的是学习和理解事物是如何工作的,以及为什么它们在你努力提高效率之前按照他们的方式工作,效率来自学习和工作你越多你做的越多越好,你减少的浪费就越多!