如何计算电话号码字符串中的破折号( - )以进行输入验证?

时间:2014-10-10 17:21:01

标签: java validation phone-number

我所拥有的是一个程序,它读入用户输入的电话号码并返回国家代码(如果存在),区号(如果存在)和本地7位电话号码。 该号码必须作为countrycode-area-local输入。因此,电话号码中可以包含的最大虚线数为2。

例如: 1-800-5555678有两个破折号(它有国家代码和区号) 800-5555678有一个破折号(它只有一个区号) 5555678没有短划线(仅限本地号码)

因此,可以使用短划线,短划线或两个划线,但不超过两个。

我想弄清楚的是你如何计算字符串中的短划线数量(" - ")以确保它们不超过两个实例。如果有,则会打印错误。

到目前为止,我有:

if(phoneNumber ///contains more more than two dashed
{
  System.out.println("Error, your input has more than two dashes. Please input using the specified format.");
{
else
{
 //normal operations
}

除了这一部分之外,一切都有效。我不知道用什么方法来做这件事。我试着看看indexOf,但我很难过。

4 个答案:

答案 0 :(得分:3)

一种方法是将数字解析为字符串然后在破折号上拆分。如果你得到的新数组长度大于3,那么就给出错误。

String s = "1-800-5555678";
String parts[] = s.split("-");
if (parts.length > 3) {
    System.out.println("error");
} else {
    // do something
}

samrap建议的更节省内存的解决方案是:

String s = "1-800-555-5678";
int dashes = s.split("-").length - 1;
if (dashes > 2) {
    System.out.print("error");
} else {
    // do something
}

答案 1 :(得分:1)

String phoneNumber = "1-800-5555678";
int counter = 0;
for( int i=0; i< phoneNumber.length(); i++ ) {
  if( phoneNumber.charAt(i) == '-' ) {
    counter++;
  } 
}

if(counter > 2) ///contains more more than two dashed
{
  System.out.println("Error, your input has more than two dashes. Please input using the     specified format.");
{
else
{
 //normal operations
}

答案 2 :(得分:0)

像这样的东西。循环遍历字符串中的字符,看看它们是-

int nDashes = 0;
for (int i=0; i<phoneNumber.length(); i++){
    if (phoneNumber.charAt(i)=='-')
        nDashes++;
}
if (nDashes>2){
    //do something
}

答案 3 :(得分:0)

正则表达式和replaceAll()是你的朋友。使用,

int count=string.replaceAll("\\d","").length();

这将用空字符串替换所有数字,因此您留下的所有数字都是- s