【问题标题】:Convert Alphabetic phone number into just numbers将字母电话号码转换为数字
【发布时间】:2018-11-07 05:46:47
【问题描述】:

我正在用 Java 编写一个程序,它需要从用户那里获取一个数字电话号码,例如:555-GET-FOOD,然后打印所有号码,555-438-3663。

我遇到了一些问题,因为我的程序只打印一个数字,而不是全部。另外,我如何使用户可以输入破折号作为其输入的一部分,例如:555-GET-FOOD。

这是我到目前为止所做的:

import java.util.*;
public class NumberTranslator {

public static void main(String[] args) {
    // Create Scanner for user input
    Scanner input = new Scanner(System.in);

    // Ask the user to enter the phone number
    System.out.println("Please enter the Phone number in this format: (555-XXX-XXXX) ");

    // Save the phone number into a string
    String phoneNumber = input.nextLine();
    //phoneNumber = phoneNumber.substring(0, 3) + "-" + phoneNumber.substring(3,6)+"-"+phoneNumber.substring(6,10)+"-";

    phoneNumber = phoneNumber.toUpperCase();
    long phoneNumberTranslated = fullPhoneNumber(phoneNumber);

    System.out.println(phoneNumberTranslated);
}

public static long fullPhoneNumber(String phoneNumber) {

    long number = 0;
    int strLength = phoneNumber.length();

    for(int i = 0; i < strLength; i++) {

        char letter = phoneNumber.charAt(i);

        if(Character.isLetter(letter)) {

            switch(letter) {
            case 'A' : case 'B' : case 'C' : number = 2; break;
            case 'D' : case 'E' : case 'F' : number = 3; break;
            case 'G' : case 'H' : case 'I' : number = 4; break;
            case 'J' : case 'K' : case 'L' : number = 5; break;
            case 'M' : case 'N' : case 'O' : number = 6; break;
            case 'P' : case 'Q' : case 'R' : case 'S' : number = 7; break;
            case 'T' : case 'U' : case 'V' : number = 8; break;
            case 'W' : case 'X' : case 'Y' : case 'Z' : number = 9; break;
            }
        }

        else if(Character.isDigit(letter)) {
             Character.getNumericValue(letter);
        }
        else {
            System.out.println("Invalid character!");
        }
    }
    return number;
}
}

我得到的输出如下:

请按以下格式输入电话号码:(555-XXX-XXXX)
555getfood
3

【问题讨论】:

    标签: java wrapper


    【解决方案1】:

    让我们更新您的代码以使其正常工作:

    public static longfullPhoneNumber(String phoneNumber)
    

    改为:

    public static String fullPhoneNumber(String phoneNumber)
    

    并在此函数中添加额外的result 变量:

    StringBuilder result = new StringBuilder();
    

    更新您的else if 声明:

    else if (Character.isDigit(letter)) {
        number = Character.getNumericValue(letter);
    }
    

    您已将Char 转换为int,但没有保存结果。

    for 循环结束时,收集我们的结果:

    result.append(String.valueOf(number));
    

    所以,最终的代码如下所示:

    public class NumberTranslator  {
      public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
    
        // Ask the user to enter the phone number
        System.out.println("Please enter the Phone number in this format: (555-XXX-XXXX) ");
    
        // Save the phone number into a string
        String phoneNumber = input.nextLine();
        // phoneNumber = phoneNumber.substring(0, 3) + "-" +
        // phoneNumber.substring(3,6)+"-"+phoneNumber.substring(6,10)+"-";
    
        phoneNumber = phoneNumber.toUpperCase();
        String phoneNumberTranslated = fullPhoneNumber(phoneNumber);
    
        System.out.println(phoneNumberTranslated);
      }
    
      public static String fullPhoneNumber(String phoneNumber) {
    
        StringBuilder result = new StringBuilder();
    
        long number = 0;
        int strLength = phoneNumber.length();
    
        for (int i = 0; i < strLength; i++) {
    
          char letter = phoneNumber.charAt(i);
    
          if (Character.isLetter(letter)) {
    
            switch (letter) {
              case 'A': case 'B': case 'C': number = 2; break;
              case 'D': case 'E': case 'F': number = 3; break;
              case 'G': case 'H': case 'I': number = 4; break;
              case 'J': case 'K': case 'L': number = 5; break;
              case 'M': case 'N': case 'O': number = 6; break;
              case 'P': case 'Q': case 'R': case 'S': number = 7; break;
              case 'T': case 'U': case 'V': number = 8; break;
              case 'W': case 'X': case 'Y': case 'Z': number = 9; break;
            }
          }
    
          else if (Character.isDigit(letter)) {
            number = Character.getNumericValue(letter);
          } else {
            System.out.println("Invalid character!");
          }
          result.append(String.valueOf(number));
        }
        return result.toString();
      }
    }
    

    【讨论】:

    • 太棒了。谢谢。
    • 如何在输入和结果中添加破折号?
    • @beginnerdev,最简单的方法是用破折号输入数字:555-get-food。并忽略破折号并添加到结果字符串
    【解决方案2】:

    我建议你简单地为这些创建一个地图

    Map<Character, String> numbers = new HashMap <Character, String> ();
    numbers.put('A', "1" );
    numbers.put('B', "1" );
    numbers.put('C', "1" );
    numbers.put('D', "2" );
    numbers.put('E', "2" );
    numbers.put('F', "2" );
    // etc
    
    for (char c: phoneNumber.toCharArray()) {
        String val = numbers.get (c);
        if (val == null) val = String.valueOf(c);  // if no mapping use as it is
        System.out.print (val);
    }
    

    【讨论】:

    • 或者只是:String val = numbers.getOrDefault(c, String.valueOf(c)); 但您也可以将地图声明为Map&lt;Character, Character&gt; numbers,然后:result+= numbers.getOrDefault(c, c);
    【解决方案3】:

    您遇到的问题是您没有添加到数字 - 您每次都在覆盖它。将 number 设置为 String 并在循环的每次迭代期间将相应的数字附加到结果字符串可能会更容易。

    此外,在“else if”中,您没有对表达式做任何事情 - 您必须将该值存储在某个变量中,否则它不会保存在任何地方。

    最后,要让用户输入破折号,只需在检查字符是否为“-”的位置添加另一个“else if”,如果是,则在结果字符串中附加一个破折号。

    【讨论】:

      【解决方案4】:

      首先,您需要验证您的输入。您可以使用正则表达式模式来验证它。关于您的输入格式:555​​-XXX-XXXX,您可以使用这个正则表达式:555-[a-zA-Z]{3}-[a-zA-Z]{4}

      并且在函数fullPhoneNumber中,它应该返回String而不是long。

      检查我的代码如下:

      public static void main(String[] args) {
          // Create Scanner for user input
          Scanner input = new Scanner(System.in);
      
          // Ask the user to enter the phone number
          System.out.println("Please enter the Phone number in this format: (555-XXX-XXXX) ");
      
          // Save the phone number into a string
          String phoneNumber = input.nextLine();
          // phoneNumber = phoneNumber.substring(0, 3) + "-" +
          // phoneNumber.substring(3,6)+"-"+phoneNumber.substring(6,10)+"-";
          if (validate(phoneNumber)) {
              phoneNumber = phoneNumber.toUpperCase();
              String phoneNumberTranslated = fullPhoneNumber(phoneNumber);
              System.out.println(phoneNumberTranslated);
          } else {
              System.out.println("Wrong phone number format.");
              return;
          }
      
      }
      
      private static boolean validate(String phoneNumber) {
          Pattern r = Pattern.compile("555-[a-zA-Z]{3}-[a-zA-Z]{4}");
      
          // Now create matcher object.
          Matcher m = r.matcher(phoneNumber);
          if (m.find()) {
              return true;
          }
          return false;
      }
      
      public static String fullPhoneNumber(String phoneNumber) {
      
          String result = "5555-";
          String suffix = phoneNumber.substring("555-".length());
          for (int i = 0; i < suffix.length(); i++) {
      
              char letter = suffix.charAt(i);
      
              if (Character.isLetter(letter)) {
      
                  switch (letter) {
                  case 'A':
                  case 'B':
                  case 'C':
                      result += "2";
                      break;
                  case 'D':
                  case 'E':
                  case 'F':
                      result += "3";
                      break;
                  case 'G':
                  case 'H':
                  case 'I':
                      result += "4";
                      break;
                  case 'J':
                  case 'K':
                  case 'L':
                      result += "5";
                      break;
                  case 'M':
                  case 'N':
                  case 'O':
                      result += "6";
                      break;
                  case 'P':
                  case 'Q':
                  case 'R':
                  case 'S':
                      result += "7";
                      break;
                  case 'T':
                  case 'U':
                  case 'V':
                      result += "8";
                      break;
                  case 'W':
                  case 'X':
                  case 'Y':
                  case 'Z':
                      result += "9";
                      break;
                  }
              } else if (letter == '-') {
                  result += "-";
              }
          }
          return result;
      }
      

      【讨论】:

        【解决方案5】:
        //try this...this will definitely work
        import java.util.Scanner;
        public class phonenumber 
        {
          char letter2num(char ch)
        {
            switch (ch)
            {
                case 'A':
                case 'B':
                case 'C':
                case 'a':
                case 'b':
                case 'c':
                    return '2';
                case 'D':
                case 'E':
                case 'F':
                case 'd':
                case 'e':
                case 'f':
                    return '3';
                case 'G':
                case 'H':
                case 'I':
                case 'g':
                case 'h':
                case 'i':
                    return '4';
                case 'J':
                case 'K':
                case 'L':
                case 'j':
                case 'k':
                case 'l':
                    return '5';
                case 'M':
                case 'N':
                case 'O':
                case 'm':
                case 'n':
                case 'o':
                    return '6';
                case 'P':
                case 'Q':
                case 'R':
                case 'S':
                case 'p':
                case 'q':
                case 'r':
                case 's':
                    return '7';
                case 'T':
                case 'U':
                case 'V':
                case 't':
                case 'u':
                case 'v':
                    return '8';
                case 'W':
                case 'X':
                case 'Y':
                case 'Z':
                case 'w':
                case 'x':
                case 'y':
                case 'z':
                    return '9';
                default:
                    return ch;
            }
        }
        public static void main(String[] args) 
        {
            Scanner joey = new Scanner(System.in);
            System.out.print("\nEnter phone number (xxx-xxx-xxxx): ");
            String goku = joey.nextLine();
            char[] gohan = goku.toCharArray();
            phonenumber number= new phonenumber();
            if(goku.length() != 10)
                System.out.print("Not phone number!! ");
            else
            {
                for(int i=0; i<10 ;i++)
                    gohan[i]=number.letter2num(gohan[i]);
            }
            goku=new String(gohan);
            goku = goku.replaceFirst("(\\d{3})(\\d{3})(\\d+)", "($1) $2-$3");
            System.out.print("phone number: "+goku);
            joey.close();
        }
        

        }

        【讨论】:

          猜你喜欢
          • 2010-11-30
          • 2014-12-18
          • 1970-01-01
          • 1970-01-01
          • 2015-02-10
          • 1970-01-01
          • 1970-01-01
          • 2023-04-04
          • 2017-04-20
          相关资源
          最近更新 更多