如何将拼音电话号码转换为数字电话号码


public class Driver
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        String phoneNumber;
        System.out.print("Enter a phonetic phone number: ");
        phoneNumber = input.nextLine();
        int i = 0;
        while (i != phoneNumber.length())
        {
            char c = phoneNumber.charAt(i);
            i++;
            if (Character.isDigit(c) == true)
            {
                phoneNumber = String.valueOf(c);
            }
            else if (Character.isLetter(c) == true)
            {
                decode(c);
            }
            else
            {
                System.out.println("Improper input");
            }
        }
        System.out.println("Numeric version of phone number: " + phoneNumber);
    }
    private static String decode(char c)
    {
        switch (c)
        {
            case 'A':
            case 'B':
            case 'C':
                return "2";
            case 'D':
            case 'E':
            case 'F':
                return "3";
            case 'G':
            case 'H':
            case 'I':
                return "4";
            case 'J':
            case 'K':
            case 'L':
                return "5";
            case 'M':
            case 'N':
            case 'O':
                return "6";
            case 'P':
            case 'Q':
            case 'R':
            case 'S':
                return "7";
            case 'T':
            case 'U':
            case 'V':
                return "8";
            case 'W':
            case 'X':
            case 'Y':
            case 'Z':
                return "9";
        }
        return " ";
    }
}

现在我的输出只显示第一个数字的数值。我不确定从拼音转换为数字后需要做什么来显示整个字符串。帮助将不胜感激。

实际上,

并没有更改电话号码,您可以声明其他变量来添加应在循环外部声明的更改字符。

    String changedNumber="";//declare outside loop
    //...
    if (Character.isDigit(c) == true) {
        changedNumber += String.valueOf(c);
    } else if (Character.isLetter(c) == true) {
        changedNumber += String.valueOf(decode(c));
    } else {
        System.out.println("Improper input");
    }

现在你直接给phoneNumber分配数字,你只是在调用decode但你没有使用返回值。

phoneNumber = String.valueOf(c);
String temp=""
while (i != phoneNumber.length()) {
        char c = phoneNumber.charAt(i);
        i++;
        if (Character.isDigit(c) == true) {
            temp += String.valueOf(c);
        } else if (Character.isLetter(c) == true) {
            temp += decode(c);
        } else {
            System.out.println("Improper input");
        }
  }
 phoneNumber = temp;
    System.out.println("Numeric version of phone number: " + phoneNumber);

phoneNumber永远不会改变。您可以创建一个名为 numericPhoneNumber 的新字符串并改为对其进行操作。

下一个问题是这条线。

phoneNumber = String.valueOf(c);

您正在将电话号码分配给单个字符。您需要附加它。固定版本是这样的。

String numericPhoneNumber = "";
for (char ch : phoneNumber.toCharArray())
{
    if (Character.isLetter(ch))
        numericPhoneNumber += decode(ch);
    else
        numericPhoneNumber += ch;
}

无需检查数字,它们将由 else 块处理。希望这有帮助。

好的,有几件事。首先,您没有将更改分配给新字符串。添加一个临时字符串并使用 += 分配新的更改,或者,更好的方法是创建一个新的StringBuilder对象并使用 .append() 方法追加更改:

Scanner input = new Scanner(System.in);
String phoneNumber;
System.out.print("Enter a phonetic phone number: ");
phoneNumber = input.nextLine();
StringBuilder sb = new StringBuilder(); //StringBuilder Object
for (int i = 0; i < phoneNumber.length(); i++)
{
    if (Character.isLetter(phoneNumber.charAt(i)))
    {
        sb.append(decode(phoneNumber.charAt(i))); //Nice, easy-to-use append() method, which takes objects of most types
    }
    else if (Character.isDigit(phoneNumber.charAt(i)))
    {
        sb.append(phoneNumber.charAt(i));
    }
    else
    {
        System.out.println("Improper input");
    }
}
System.out.println("Numeric version of phone number: " + sb.toString());

我应该提到的第二件事,您的decode(char c)函数虽然写得很好,但在使用它时应该将参数转换为大写,以防万一有人输入小写字母:

switch (Character.toUpperCase(c))
{
    //case statements
}

最新更新