1. ホーム
  2. java

[解決済み] アルファベットの電話番号を数字だけに変換する機能

2022-02-17 04:28:25

質問

Javaでプログラムを書いているのですが、ユーザーから電話番号を数字で受け取る必要があります。555-GET-FOOD」と入力し、「555-438-3663」という数字をすべて表示する必要があります。

私のプログラムは1つの数字を表示するだけで、すべての数字を表示しないので、いくつかの問題にぶつかりました。また、ユーザーが入力の一部としてダッシュを入力できるようにするには、どうすればよいでしょうか。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

解決方法は?

コードを更新して動作するようにしましょう。

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