本周早些时候,我刚刚开始研究 Ruby,但遇到了一些我不太了解如何编写代码的问题。我正在将一个用 Java 编写的扫描器转换为 Ruby 以进行类分配,我已经进入了这一部分:
if (Character.isLetter(lookAhead))
{
return id();
}
if (Character.isDigit(lookAhead))
{
return number();
}
lookAhead
是从字符串中挑出的单个字符(每次循环移动一个空格),这两个方法判断它是字符还是数字,返回合适的标记类型.我一直无法找出与 Character.isLetter()
和 Character.isDigit()
等价的 Ruby。
最佳答案
使用匹配字母和数字的正则表达式:
def letter?(lookAhead)
lookAhead.match?(/[[:alpha:]]/)
end
def numeric?(lookAhead)
lookAhead.match?(/[[:digit:]]/)
end
这些被称为 POSIX 括号表达式,它们的优点是给定类别下的 unicode 字符将匹配。例如:
'ñ'.match?(/[A-Za-z]/) #=> false
'ñ'.match?(/\w/) #=> false
'ñ'.match?(/[[:alpha:]]/) #=> true
您可以在 Ruby’s docs for regular expressions 中阅读更多内容.
关于Ruby:如何判断一个字符是字母还是数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14551256/