java中的电话号码

时间:2014-07-10 03:41:07

标签: java phone-number

我已经有了将七个字母的短语放入电话号码的代码。连字符未在正确的位置返回。我真的不知道如何解决这个问题。它应返回xxx-xxxx,如果短语为xxxx xxx,则返回xxxx-xxx。请有人帮我解决这个问题!

代码:

import java.util.*;
import java.lang.*;

public class Project1 {
  public static char getNumber(char letter) {
   char ret = 0;

    if (letter== 'A' || letter=='a' || letter== 'B' || letter=='b' || letter=='C' || letter=='c') {
      return '2';
    }
    else if (letter== 'D' || letter=='d' || letter== 'E' || letter=='e' || letter=='F' || letter=='f') {
      return '3';
    }
    else if (letter== 'G' || letter=='g' || letter== 'H' || letter=='h' || letter=='I' || letter=='i') {
      return '4';
    }
    else if (letter== 'J' || letter=='j' || letter== 'K' || letter=='k' || letter=='L' || letter=='l') {
      return '5';
    }
    else if (letter== 'M' || letter=='m' || letter== 'N' || letter=='n' || letter=='O' || letter=='o') {
      return '6';
    }
    else if (letter== 'P' || letter=='p' || letter== 'Q' || letter=='q' || letter=='R' || letter=='r'|| letter=='S' || letter=='s') {
      return '7';
    }
    else if (letter== 'T' || letter=='t' || letter== 'U' || letter=='u' || letter=='V' || letter=='v') {
      return '8';
    }
    else if (letter== 'W' || letter=='w' || letter== 'X' || letter=='x' || letter=='Y' || letter=='y' || letter=='Z' || letter=='z') {
      return '9';
    }
   if (letter == ' ')
     return '-';
   return ret;
  }




  public static void main (String[] arg) {
    Scanner input = new Scanner(System.in);
    System.out.println("Please enter a 7 letter phrase: ");
    String number = input.nextLine();
    for (int i = 0; i < 8; i++) {
      System.out.print(getNumber(number.toUpperCase().charAt(i)));
    }


  }
}

2 个答案:

答案 0 :(得分:1)

  

它应该返回xxx-xxxx,如果短语是xxxx xxx,则返回xxxx-xxx。请有人帮我解决这个问题!

你走了!一点总是对灵魂有益:

{
    String number = input.nextLine();
    final StringBuilder builder = new StringBuilder(); // Buffer the sequence.
    for (int i = 0; i < 8; i++) {
      builder.append(getNumber(number.toUpperCase().charAt(i)));
    if (builder.toString().getCharAt(2) != '-') // If the format isn't correct, fix it
      System.out.println(builder.toString().replaceFirst("(...)(.).(...)", "$1-$2$3"))
    }
}

  

As seen from CSᵠ's comment,您可以使用以下通用正则表达式,以便该部分变为:

builder.toString().replaceFirst("^\\D*(\\d)\\D*(\\d)\\D*(\\d)\\D*(\\d)\\D*(\\d)\\D*(\\d)\\D*(\\d)\\D*$", "$1$2$3-$4$5$6$7");
  

修改:将正则表达式更新为\N backreferences does not work in Java.

答案 1 :(得分:0)

这是解决问题的快速而肮脏的解决方案。

import java.util.*;

public class Project1 {
    public static char getNumber(char letter) {
        char ret = 0;
        if( letter < 'A' )
        {
            ret = '0';
        }
        else if( letter < 'D' )
        {
            ret = '2';
        }
        else if( letter < 'G' )
        {
            ret = '3';
        }
        else if( letter < 'J' )
        {
            ret = '4';
        }
        else if( letter < 'M' )
        {
            ret = '5';
        }
        else if( letter < 'P' )
        {
            ret = '6';
        }
        else if( letter < 'T' )
        {
            ret = '7';
        }
        else if( letter < 'W' )
        {
            ret = '8';
        }
        else if( letter <= 'Z' )
        {
            ret = '9';
        }
        else
        {
            ret = '0';

        }
        return ret;
    }

    public static void main (String[] arg) {
        Scanner input = new Scanner(System.in);
        System.out.println( "Please enter a 7 letter phrase: " );
        String number = input.nextLine().toUpperCase();
        StringBuffer buff = new StringBuffer();
        for( int i = 0, j = 0; j < number.length() && i < 7; j++ )
        {
            char c = number.charAt(j);
            if( c != ' ' )
            {
                if( i == 3 )
                {
                    buff.append( '-' );
                }
                buff.append( getNumber( c ) );
                i++;
            }
        }
        System.out.println( buff );
    }
}

关键点:

  • 如果字母字符保证为大写,则无需检查小写。
  • 在循环的每次迭代中都不需要大写输入字符串。一开始就做一次。
  • 我忽略空格,并且在打印位置3(即第四个字符)之前总是添加连字符。
  • char可以使用范围与数字进行比较。这大大简化了代码量(即,范围内的每个字母都不需要写下来)。