2016-03-02 62 views
0

我想验证用户输入的电话号码,我需要做的第一件事是检查,以确保输入字符串的长度是10哪个是这是您在代码中看到的问题。java验证字符串包含数字和搜索,以确保没有字符

现在是问题出现的地方,我还需要检查以确保没有输入字符,以及有关如何在不使用数组的情况下执行此操作的任何想法。我想使用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++; 
      } 
    } 

回答

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); 

    } 


} 

是的,它是一个很大的代码是可以凝结,但它是学习和了解如何工作更重要,为什么他们的工作,他们的方式尝试是有效的才做,效率自带学习工作越多,你做得越好,你得到的垃圾就越多!

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; 
    } 
} 
+0

为什么不''[0-9] {10}'? –

+0

@AndyTurner因为我的咖啡机今天早上坏了 –

+0

是的,我可以这样做,我曾经希望使用Character.isLetter()方法的一些东西。我似乎无法正确实施。 – Afflicted

0

您可以用String正则表达式匹配检查字符串是否是一个数字或不:

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

作为替代方案,如果您有项目导入阿帕奇公共图书馆,你可以使用StringUtilsisNumeric方法类,如:

StringUtils.isNumeric(phoneNum);

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; 
} 
0

您可以使用此: /*检查是数字*/

StringUtils.isNumeric(yourNumber); 

或正则表达式来避免所有字符diferente数字。

`{\\d+}` 
相关问题