首页 > 解决方案 > 在 Java 上打印破折号的问题

问题描述

我正在编写一个程序,该程序模拟将字母电话号码转换为数字。例如:888-get-food == 555-438-3663。

最初,用户应按以下格式输入电话号码:888-GET-FOOD(带有破折号)。当我尝试检查用户输入是否有破折号时,它会打印破折号,但前面有数字 1。很烦人。

这是我到目前为止所拥有的:

// Ask the user to enter the phone number
System.out.println("Please enter the phone number: ");

// Save the phone number into a string
String initialPhoneNumber = input.nextLine();

// Convert user input to UPPERCASE
initialPhoneNumber = initialPhoneNumber.toUpperCase();

// This will be the phone number converted
String finalPhoneNumber = fullPhoneNumber(initialPhoneNumber);

// Print number
System.out.println(initialPhoneNumber);
System.out.println(finalPhoneNumber);

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

  char letter = initialPhoneNumber.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;
      case '-':number='-';

    }
  }

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

  else if (initialPhoneNumber.charAt(i) == '-') {
      number = Character.getNumericValue(letter);
  }

这是输出:

请输入电话号码:
555-GET-FOOD
555-GET-FOOD
555-1438-13663

为什么数字 1 出现在破折号前面?我怎样才能让它不显示?换句话说,我如何打印或分隔由破折号分隔的数字?

谢谢

标签: java

解决方案


问题出在声明中:

else if (initialPhoneNumber.charAt(i) == '-') {
  number = Character.getNumericValue(letter);
}

如果作为参数传递的字符不是数字,则该方法Character.getNumericValue()返回。 由于您正在传递,该方法返回。 这就是为什么你得到破折号之后。-1
--1
1

更新

假设 for 循环是您的方法的一部分fullPhoneNumber,您可以按如下方式解决它:

public String fullPhoneNumber(String initialPhoneNumber)
{
  StringBuilder result;
  result = new StringBuilder();

  for (int i = 0; i < initialPhoneNumber.length(); i++)
  {
    char letter = Character.toUpperCase(initialPhoneNumber.charAt(i));
    switch (letter)
    {
      case 'A':
      case 'B':
      case 'C':
        letter = '2';
        break;
      case 'D':
      case 'E':
      case 'F':
        letter = '3';
        break;
      case 'G':
      case 'H':
      case 'I':
        letter = '4';
        break;
      case 'J':
      case 'K':
      case 'L':
        letter = '5';
        break;
      case 'M':
      case 'N':
      case 'O':
        letter = '6';
        break;
      case 'P':
      case 'Q':
      case 'R':
      case 'S':
        letter = '7';
        break;
      case 'T':
      case 'U':
      case 'V':
        letter = '8';
        break;
      case 'W':
      case 'X':
      case 'Y':
      case 'Z':
        letter = '9';
        break;
      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
      case '-':
        break;
      default:
        throw new IllegalArgumentException("");
    }

    result.append(letter);

  } // for

  return (result.toString());

} // fullPhoneNumber

推荐阅读