说我有一个字符串phone = "1-800-test"
我需要将字母转换为数字。
做这样的事情是行不通的(注意我当然是在循环它):
phone = phone.replace(phone.charAt(9), (char) getNumber(phone.charAt(9)));
请注意getNumber()
是一个带字母并返回数字的方法:
int getNumber(char uppercaseLetter)
无论如何,我得到一些奇怪的输出,字母被一个奇怪的方格所取代。
我应该如何用数字代替字母?
答案 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))));
但不推荐......