因此,我创建了此代码以将单词转换为电话号码,但是当我尝试使用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()
时,您只是通过为不需要的小写字符编写大小写来写多余的行...