将此代码转换为Java的最佳方法是什么? (称为将字母数字电话号码转换为所有数字的部分) http://lawrence.ecorp.net/inet/samples/regexp-format.php
由于Java还没有lambda ... String.replace的最佳方法是什么?
答案 0 :(得分:2)
return phoneStr.replace(/[a-zA-Z]/g, function(m) {
var ix= m[0].toLowerCase().charCodeAt(0)-0x61; // ASCII 'a'
return '22233344455566677778889999'.charAt(ix);
});
因此在Java中,类似于:
StringBuffer b= new StringBuffer();
Matcher m= Pattern.compile("[A-Za-z]").matcher(phoneStr);
while (m.find()) {
int ix= (int) (m.group(0).toLowerCase().charAt(0)-'a');
m.appendReplacement(b, "22233344455566677778889999".substring(ix, ix+1));
}
m.appendTail(b);
return b.toString();
用Java的Matcher替换是笨拙的,你可能更喜欢在这种情况下使用数组:
char[] c= phoneStr.toLowerCase().toCharArray();
for (int i= 0; i<c.length; i++)
if (c[i]>='a' && c[i]<='z')
c[i]= "22233344455566677778889999".charAt((int) (c[i]-'a'));
return new String(c);
答案 1 :(得分:1)
执行此操作的一个非常基本的方法是:
String replaceCharsByNumbers(String stringToChange) {
return stringToChange
.replace('a', '2')
.replace('b', '2')
.replace('c', '2')
.replace('d', '3')
.replace('e', '3')
.replace('f', '3')
.replace('g', '4')
.replace('h', '4')
.replace('i', '4')
.replace('j', '5')
.replace('k', '5')
.replace('l', '5')
.replace('m', '6')
.replace('n', '6')
.replace('o', '6')
.replace('p', '7')
.replace('q', '7')
.replace('r', '7')
.replace('s', '7')
.replace('t', '8')
.replace('u', '8')
.replace('v', '8')
.replace('w', '9')
.replace('x', '9')
.replace('y', '9')
.replace('z', '9');
}