JavaScript Regex для Java Regex - заменить и лямбда-выражения - PullRequest
1 голос
/ 16 сентября 2010

Каков наилучший способ приблизить перевод этого кода на Java? (раздел называется Преобразование буквенно-цифрового номера телефона во все цифры) http://lawrence.ecorp.net/inet/samples/regexp-format.php

Поскольку у Java еще нет лямбды ... каков наилучший подход для String.replace?

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

Ничего себе, оригинальный код немного слишком многословен.Я бы сделал:

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 голос
/ 16 сентября 2010

Очень простой способ сделать это:

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');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...