开发者

JavaScript Regex to Java Regex - Replace and Lambdas

What is the best way to approach translating this code into Java? (the section called Convert Alpha-numeri开发者_JAVA技巧c Phone Number to All Numeric) http://lawrence.ecorp.net/inet/samples/regexp-format.php

Since Java doesn't have a lambda yet... what is the best approach for the String.replace ?


Wow, the original code is a bit over-verbose. I'd do:

return phoneStr.replace(/[a-zA-Z]/g, function(m) {
    var ix= m[0].toLowerCase().charCodeAt(0)-0x61; // ASCII 'a'
    return '22233344455566677778889999'.charAt(ix);
});

And consequently in Java, something like:

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();

Replacing with Java's Matcher is clumsy enough that you might just prefer to use an array for this case:

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);


A very basic way to do this would be :

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');
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜