将此代码转换为 Java 的最佳方法是什么? (称为将字母数字电话号码转换为所有数字的部分) http://lawrence.ecorp.net/inet/samples/regexp-format.php
由于 Java 还没有 lambda...什么是 String.replace 的最佳方法?
最佳答案
哇,原始代码有点过于冗长了。我会这样做:
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);
关于JavaScript 正则表达式到 Java 正则表达式 - 替换和 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3730210/