UPDATE:
我的实用程序的最终版本如下所示:
StringBuilder b = new StringBuilder();
for(char c : inLetters.toLowerCase().toCharArray())
{
switch(c)
{
case '0': b.append("0"); break;
case '1': b.append("1"); break;
case '2': case 'a': case 'b': case 'c': b.append("2"); break;
case '3': case 'd': case 'e': case 'f': b.append("3"); break;
case '4': case 'g': case 'h': case 'i': b.append("4"); break;
case '5': case 'j': case 'k': case 'l': b.append("5"); break;
case '6': case 'm': case 'n': case 'o': b.append("6"); break;
case '7': case 'p': case 'q': case 'r': case 's': b.append("7"); break;
case '8': case 't': case 'u': case 'v': b.append("8"); break;
case '9': case 'w': case 'x': case 'y': case 'z': b.append("9"); break;
}
}
return builder.toString();
原问题:
我正在承担将字母数字电话号码转换为数字字符串的简单任务。例如,1-800-HI-HAXOR 将变为 1-800-44-42967。我最初的尝试是创建一个令人讨厌的 switch 语句,但我希望有一个更优雅、更高效的解决方案。这是我所得到的:
for(char c : inLetters.toLowerCase().toCharArray())
{
switch(c)
{
case '0': result+="0"; break;
case '1': result+="1"; break;
case '2': case 'a': case 'b': case 'c': result+="2"; break;
case '3': case 'd': case 'e': case 'f': result+="3"; break;
case '4': case 'g': case 'h': case 'i': result+="4"; break;
case '5': case 'j': case 'k': case 'l': result+="5"; break;
case '6': case 'm': case 'n': case 'o': result+="6"; break;
case '7': case 'p': case 'q': case 'r': case 's': result+="7"; break;
case '8': case 't': case 'u': case 'v': result+="8"; break;
case '9': case 'w': case 'x': case 'y': case 'z': result+="9"; break;
}
}
Thanks!
switch 语句其实并没有那么糟糕。您的算法与电话号码的长度呈线性关系。该代码是可读的,并且很容易通过检查进行验证。我不会搞乱它,除了添加一个default
处理错误的情况。 (我不是 Java 程序员,所以如果它被称为其他名称,请原谅我。)
If you have为了使其更快,按字符索引的预初始化表将避免除基本错误检查之外的任何比较。您甚至可以通过复制表中的值来避免大小写转换(digit['A'] = digit['a'] = "2";
)。初始化表的成本将根据转换总数进行摊销。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)