2014-09-24 335 views
0
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 " "; 

    } 

} 

现在我的输出只显示第一位数字的数值。我不确定我需要做什么来显示整个字符串,一旦它从语音转换为数字。帮助将不胜感激。如何将语音电话号码转换为数字电话号码?

+0

要修改的PHONENUMBER在循环这实际上是依赖于PHONENUMBER你需要使用全局的字符串作为while循环以更改编号。 – Himanshu 2014-09-24 05:48:35

回答

0

你是实际上并没有改变你的电话号码,你可以声明其他变量来添加应该在循环外声明的改变字符。

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); 
0
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); 
0

phoneNumber是从未改变。您可以创建一个名为numericPhoneNumber的新字符串,并对其进行操作。

接下来的问题是这一行。

phoneNumber = String.valueOf(c); 

您正在将phoneNumber分配给单个字符。你需要追加。一个固定的版本就是这个。

String numericPhoneNumber = ""; 

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

有没有必要检查数字,他们将由else块处理。希望这可以帮助。

0

好吧,一对夫妇。首先,您不会将更改分配给新字符串。添加一个临时字符串,并使用+ =分配的新变化,或者,甚至更好的方法,创建一个新的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 
}