在Scala中检查字符是否为ASCII字母(aZ)的优雅方法是什么?

r0e*_*bbe 7 ascii scala

我目前正在使用扫描仪和分析程序,需要一个接受ASCII字母字符的解析器 - 所以我不能使用char.isLetter.

我自己想出了两个解决方案.我不喜欢他们两个.

正则表达式

def letter = elem("ascii letter", _.toString.matches("""[a-zA-Z]"""))
Run Code Online (Sandbox Code Playgroud)

使用正则表达式来检查这么简单的事情似乎相当"过度".

范围检查

def letter = elem("ascii letter", c => ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z'))
Run Code Online (Sandbox Code Playgroud)

在我看来,这将是Java的发展方向.但它不是真的可读.

是否有一个更清洁,更像Scala的解决方案来解决这个问题?我并不担心性能,因为在这种情况下无关紧要.

Dao*_*Wen 16

你说你不能使用Char.isLetter因为你只想要ASCII字母.为什么不将其限制为7位ASCII字符范围?

def isAsciiLetter(c: Char) = c.isLetter && c <= 'z'
Run Code Online (Sandbox Code Playgroud)

如果读者想检查ASCII包括非字母,那么:

def isAscii(c: Char) = c.toInt <= 127
Run Code Online (Sandbox Code Playgroud)

  • 将此优雅与Java线程大声笑进行比较:http://stackoverflow.com/questions/3585053/in-java-is-it-possible-to-check-if-a-string-is-only-ascii (2认同)