因此,我创建了此代码以将单词转换为电话号码,但是当我尝试使用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 );

}


}}

最佳答案

在代码中修复:


使用while(count < telLetter.length())代替while(count <7) ...
可以通过telLetter.charAt(i)删除(telLetter.charAt(count)) ...这样,您无需创建额外的变量int i = 0; ...这是使变量保持最小的一种好习惯。
使用扫描仪获取输入...。Scanner sc = new Scanner(System.in); String telLetter = sc.next(); ...
使用完资源后,请使用sc.close();关闭它们。
我也可以看到您在每个数字的开头都添加了7 ...如果这是必需的,那么还可以。.否则,您可以使用... String telNumber="";
我建议使用StringBuilder,因为您可以在一个对象中完成所有操作。.每次在string中附加一个字符时,您将不断创建new string并将其引用为telNumber
同样在您的代码中,请删除telLetter = telLetter.toUpperCase();或使用小写字母删除大小写..因为在制作toUpperCase()时,您只是通过为不需要的小写字符编写大小写来写多余的行...

09-26 09:58