Ruby: Как узнать, является ли символ буквой или цифрой?
Я только начал заниматься Ruby раньше на этой неделе, и я столкнулся с чем-то, что я не совсем понимаю, как кодировать. Я конвертирую сканер, написанный на Java в Ruby для присвоения класса, и я перешел к этому разделу:
if (Character.isLetter(lookAhead))
{
return id();
}
if (Character.isDigit(lookAhead))
{
return number();
}
lookAhead
- это один символ, выбранный из строки (перемещаясь по одному пробелу каждый раз, когда он проходит цикл), и эти два метода определяют, является ли это символом или цифрой, возвращая соответствующий тип токена. Я не смог вычислить эквивалент Ruby для Character.isLetter()
и Character.isDigit()
.
Ответы
Ответ 1
Используйте регулярное выражение, соответствующее буквам и цифрам:
def letter?(lookAhead)
lookAhead =~ /[[:alpha:]]/
end
def numeric?(lookAhead)
lookAhead =~ /[[:digit:]]/
end
Они называются выражениями POSIX, и их преимущество заключается в том, что символы юникода под данной категорией будут совпадать. Например:
'ñ' =~ /[A-Za-z]/ #=> nil
'ñ' =~ /\w/ #=> nil
'ñ' =~ /[[:alpha:]]/ #=> 0
Вы можете прочитать больше в Rubys docs для регулярных выражений.
Ответ 2
Самый простой способ - использовать регулярное выражение:
def numeric?(lookAhead)
lookAhead =~ /[0-9]/
end
def letter?(lookAhead)
lookAhead =~ /[A-Za-z]/
end