Google AdSense (text)

hidden logo stop

Moving

거지 같은 이글루스 광고가 싫어서,
새 보금자리(http://blog.leocat.kr/)로 이사감.

[Java] String에 한글 포함 확인 Computer & Program

String 문자열에 한글이 포함되었는지 확인할 일이 많다. 한글만 입력해야 하는 경우..

검색해 보면 0x80을 넘는 문자(character)를 포함하고 있으면 한글이라 판단하는 것도 있다. 혹은 문자가 0xa1과 0xfe 사이에 포함되면 한글이라 판단하는 것도 있다. 이 방법은 한글을 찾는다기 보다는 영문이 아닌 문자를 찾는 방법이다. 자.. 그럼 정말 한글 문자를 포함하고 있는지 확인해 볼까??

방법은 의외로 너무 간단했다. 자바는 문자를 유니코드로 표현하게 되고, 각 문자는 어떤 문자블럭에 포함되는지를 가지게 된다. 이는 Character.UnicodeBlock으로 표현한다. 이 UnicodeBlock이 어떤 문자집합에 포함되는지 확인해 보면 한글인지 판단할 수 있다. 그리고 한글 이외에 다른 나라의 언어들도 포함되어 있어 정확한 구분이 가능하다.

그다지 설명할게 없으니 그냥 예제를 보면 되겠다. @ㅅ@;;;
@Test
public void testContainsHangul()
{
    assertThat(containsHangul("abc"), is(false));
    assertThat(containsHangul("한"), is(true));
    assertThat(containsHangul("한글"), is(true));
    assertThat(containsHangul("한abc"), is(true));
    assertThat(containsHangul("한abc글"), is(true));
    assertThat(containsHangul("ab한c"), is(true));
    assertThat(containsHangul("a한b글c테d스e트f"), is(true));
    assertThat(containsHangul("123abc"), is(false));
    assertThat(containsHangul("123"), is(false));
    assertThat(containsHangul("한123"), is(true));
    assertThat(containsHangul("a1b2c3d4"), is(false));
    assertThat(containsHangul("a1b2한글c3d4"), is(true));
    assertThat(containsHangul("にほんご"), is(false));
    assertThat(containsHangul("日本語"), is(false));
}

public boolean containsHangul(String str)
{
    for(int i = 0 ; i < str.length() ; i++)
    {
        char ch = str.charAt(i);
        Character.UnicodeBlock unicodeBlock = Character.UnicodeBlock.of(ch);
        if(UnicodeBlock.HANGUL_SYLLABLES.equals(unicodeBlock) ||
                UnicodeBlock.HANGUL_COMPATIBILITY_JAMO.equals(unicodeBlock) ||
                UnicodeBlock.HANGUL_JAMO.equals(unicodeBlock))
            return true;
    }
    return false;
}


+ 유니코드와 UTF-8 인코딩 (블럭 및 문자 인코딩 테이블)
UTF-8 encoding table and Unicode characters

+ 내용 출처
한글여부 확인

핑백

덧글

  • decoder 2009/08/23 12:44 # 삭제 답글

    와, 좋은 방법이네요. ^^
    감사합니다~
  • Sigel 2009/08/23 13:03 #

    좋더라구요.. 즐거운 코딩하세용 ^^
  • 권남 2009/08/31 20:32 # 답글

    저는 Unicode 코드표 보고서 한글 영역이 들어왔는지를 직접 검사했었는데, 좋은팁 감사합니다.
  • Sigel 2009/09/01 08:50 #

    아.. 유니코드표가 있군요.. 비교 횟수로 보면 그게 더 빠를지도 ㅋㅋ 코드표 찾아봐야 겠군요.. 좋은 정보 감사합니다.
  • 강환기 2009/09/08 10:37 # 삭제 답글

    좋은 방법이군요.
    JAVA에 이런 것이 포함되어 있는 줄을 모랐습니다. ^^
    유용한 정보 캄사합니다. >0<) b
  • Sigel 2009/09/08 15:10 #

    저도 이번에 처음 알았어요. 신기한 기능들이 이미 구현되어 있는데 그걸 찾아서 쓰는 재미도 쏠쏠한거 같아요 :)
  • 제러스 2011/01/21 09:36 # 삭제 답글

    좋은 정보 감사합니다. 퍼갈께요
  • 향긋한 소리 2012/07/11 09:52 # 삭제 답글

    와우~~ 님 천재!!!! ^0^)b
  • Sigel 2012/07/11 10:48 #

    저도 줏어듣고 사용하는지라..
    유니코드로 관리되는 자바덕분이죠
댓글 입력 영역

Google AdSense (text/image)