将字符串转换为数字

时间:2011-11-24 14:43:46

标签: java

说我有一个字符串phone = "1-800-test"

我需要将字母转换为数字。

做这样的事情是行不通的(注意我当然是在循环它):

phone = phone.replace(phone.charAt(9), (char) getNumber(phone.charAt(9)));

请注意getNumber()是一个带字母并返回数字的方法:

int getNumber(char uppercaseLetter)

无论如何,我得到一些奇怪的输出,字母被一个奇怪的方格所取代。

我应该如何用数字代替字母?

2 个答案:

答案 0 :(得分:10)

(char)1不是你需要的。您需要'1'

这样做的好方法是为所有字母创建一个Map<Character, Character>,预先填充它:map.put('t', '8')等,然后

for (...) {
   Character letter = phone.charAt(i);
   Character digit = map.get(Character.toLowerCase(letter));
   if (digit != null) {
      phone = phone.replace(letter, digit);
   } 
}

一个简单的解决方案是每个角色只有一行:

phone = phone.replace('a', '2');
phone = phone.replace('b', '2');
//etc..

(或者,为了获得更好的效果,请使用StringBuilder's replace(..)indexOf(..)

答案 1 :(得分:2)

执行(char)1会给出由1表示的ASCII字符,这样就可以得到奇怪的正方形。 您只需使用“1”即可。如果你坚持将整数转换为ASCII,只需添加48(因为这是数字从ascii开始的位置)。即(char)48为'0',(char)49为'1',依此类推。这对我来说似乎没有必要。

您问题的确切答案是:

phone = phone.replace(phone.charAt(9), (char)(48+getNumber(phone.charAt(9))));

但不推荐......