把单词转换成拨号键盘上的数字。

题目描述

把单词转换成拨号键盘上的数字。
如“dell”转换成3355.“alienware”转换成254369273

题目来源及自己的思路

使用 JavaScript function 来写,考虑到用switch,想用[a-cA-C] 可以输出2 这样的写法,但是不太清楚如何写,求解

阅读 2.1k
3 个回答

数字与字母互换是简单的,有个映射表就行了,但你这是想直接用0~9去映射a~z?我佩服你的脑回路


const DATA = [
  '',
  '',
  'abcABC',
  'defDEF',
  'ghiGHI',
  'jklJKL',
  'mnoMNO',
  'pqrsPQRS',
  'tuvTUV',
  'wxyzWXYZ',
];

const getNumber = str => str.split('').map(v => DATA.findIndex(s => s.includes(v))).join('');

这是之前写过的9宫格转换方法,参考下

getNumber('r')// 7
getNumber('d') //3

你可以试着用ASCII码来判断,不过感觉上面的数组方式其实效率更高点

public static String getNum(String value)
    {
        StringBuffer sbu = new StringBuffer();
        char[] chars = value.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            int num = (int)chars[i];

            if (num < 97 || num >122){
                return "数据错误";
            }
            int index = (num -97)/3;
            if (index < 5) {
                sbu.append(index+2);
            }else if(num < 116){
                sbu.append(7);
            }else if(num < 119){
                sbu.append(8);
            }else{
                sbu.append(9);
            }


        }
        return sbu.toString();
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题