답변
다음 방법은 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
유니 아닌 다른 많은 갖는다 인쇄 가능한 문자. 예 : http://www.fileformat.info/info/unicode/char/200B/index.htm – pedrofurla
제안 된 방법은 인쇄 가능한 ASCII 문자 범위 밖에서 인쇄 할 수없는 것으로 간주하므로 인쇄 할 수없는 유니 코드 문자를 감지 할 수 있어야합니다 . 예 : 'hasNonprintableAsciiChar ("abc123"+ 0x200B.toChar)'는'true'를 반환합니다. –
대단히 감사합니다. 모든 응답을 제공합니다. 모두 도움이됩니다. – Garipaso
여기에 관용적 스칼라로 번역 this question에 허용 대답이야.
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)
https://stackoverflow.com/questions/2485636/how-to-detect-and-replace-non-printable-characters-in-a-string-using-java – pedrofurla