在 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)
我还没有找到任何这方面的文档。
在 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)