在 Scala 中检测不可打印的字符

Detecting non-printable characters in Scala

我还没有找到任何这方面的文档。

在 Scala 中有没有办法查明一个字符串是否包含任何不可打印的字符?

以下方法检测non-printable ASCII characters。一个简单的正则表达式模式用于查找 0x20-0x7E ASCII 范围之外的任何字符:

def hasNonprintableAsciiChar(s: String): Boolean = {
  val pattern = """[^\x20-\x7E]+""".r
  pattern.findFirstMatchIn(s) match {
    case Some(_) => true
    case None => false
  }
}

hasNonprintableAsciiChar("abc-xyz-123")
// res1: Boolean = false

hasNonprintableAsciiChar("abc¥xyz£123")
// res2: Boolean = true

hasNonprintableAsciiChar("abc123" + '\u200B')
// res3: Boolean = true

这是 this question 的公认答案,已翻译成惯用的 Scala。

import java.awt.event.KeyEvent

def isPrintableChar(c: Char) =
  !Character.isISOControl(c) &&
  c != KeyEvent.CHAR_UNDEFINED &&
  Option(Character.UnicodeBlock.of(c)).fold(false)(
    _ ne Character.UnicodeBlock.SPECIALS)