字符串索引超出范围,单词到电话号码转换

时间:2015-07-28 04:25:19

标签: java text

所以我创建了这个代码来将单词转换为电话号码,但是当我尝试使用7字以下的字母运行此代码时,它将显示超出范围的字符串索引。但是7个或更多是好的。我该如何解决?如果是这样,我如何设置字符串范围?

{  
System.out.println("Enter a word to be converted: ");
String  telLetter = console.next ();
telLetter = telLetter.toUpperCase();
String  telNumber="7";
int count=0;
int  i=0;
while(count <7)

{switch(telLetter.charAt(i))
 {case 'A':case 'B':case 'C': case 'a': case 'b': case 'c':
              telNumber += "2";
              count++;
      break;
  case 'D':case 'E':case 'F': case 'd': case 'e': case 'f':
               telNumber += "3";
              count++;
      break;
   case 'G':case 'H':case 'I': case 'g': case 'h': case 'i':
              telNumber += "4";
              count++;
      break;
    case 'J':case 'K':case 'L': case 'j': case 'k': case 'l':

              telNumber += "5";
             count++;
      break;
    case 'M':case 'N':case 'O': case 'm': case 'n': case 'o':
          telNumber += "6";
              count++;
      break; 
    case 'P':case 'R':case 'S': case 'p': case 'r': case 's':
              telNumber += "7";
              count++;
      break;
    case 'T':case 'U':case 'V': case 't': case 'u': case 'v': 
            telNumber += "8";   
            count++;
      break;
    case 'W':case 'X':case 'Y':case 'Z': case 'w': case 'x': case 'y': case 'z':
         telNumber += "9";
         count++;
      break;
      }
    if(  count==3) {
       telNumber += "-";
   }
   i++;
           }     
System.out.println( telNumber );

}


}}

4 个答案:

答案 0 :(得分:1)

代码修复:

  1. 使用while(count < telLetter.length())代替while(count <7) ...
  2. telLetter.charAt(i)可以通过(telLetter.charAt(count))移除...通过这样做,您不需要创建额外的变量int i = 0; ...这是一个保持变量的好习惯最小。
  3. 使用扫描仪获取输入...赞... Scanner sc = new Scanner(System.in); String telLetter = sc.next(); ...
  4. 使用资源后,请使用sc.close(); ....
  5. 关闭它们
  6. 此外,我可以看到你在每个号码的开头追加7 ......如果这是一个要求,那么它就可以了......其他明智的你可以使用...... String telNumber="" ;
  7. 我建议您使用StringBuilder,因为在一个对象中,您可以完成所有操作..每次在string附加一个字符时,您不断创建new string并为其提供参考telNumber
  8. 同样在您的代码中,删除telLetter = telLetter.toUpperCase();或删除带有小写字母的案例..因为在制作toUpperCase()时,您只是通过为不需要的小写字符编写案例来编写额外的行...

答案 1 :(得分:0)

你的while循环条件需要检查telLetter字符串的长度。

while (count <7 && count < telLetter.length())

答案 2 :(得分:0)

while(count <7) 您的代码在运行7个字符之前不会结束。尝试使用while(count < telLetter.length())

答案 3 :(得分:0)

System.out.println("Enter a word to be converted: ");
Scanner scan=new Scanner(System.in);
String  telLetter = scan.next ();
int stringLength=telLetter.length();
telLetter = telLetter.toUpperCase();
String  telNumber="7";
while(count <stringLength)
{
switch(telLetter.charAt(count))

像这样更改您的代码。 但根据您的代码,7总是以转换后的电话号码为前缀。     字符串telNumber =&#34;&#34 ;; telNumber应该用空字符串声明。