检测Scala中的不可打印字符

时间:2017-09-08 15:35:19

标签: scala scala-collections

我没有遇到任何关于此的文件。

有没有办法找出字符串是否包含Scala中的任何不可打印的字符?

2 个答案:

答案 0 :(得分:2)

以下是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)

答案 1 :(得分:1)

以下方法检测到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