2023. 6. 21. 14:25ㆍVB.NET/왕초보
프로젝트를 작성하다보면 가끔 한글과 영문을 구분해야 하는 경우가 생길때가 있다. 영문만 입력을 받아야 한다던가, 한영이 섞이면 안된다던가 하는 따위의 상황이 발생했을때 사용할만한 함수를 간략하게 만들어보자.
1. 하나의 문자가 한글인지 확인하는 함수
Public Function IsKorean(ByVal str As String) As Boolean
Return (str >= ChrW(&HAC00) AndAlso str <= ChrW(&HD7A3))
End Function
한글 (혹은 중국어, 일본어와 같은) 2바이트 문자열은 각각의 코드영역이 있으며 이중 한글은 &HAC00~&HD7A3에 있으니 문자가 이 영역안에 있으면 한글이라고 판단하게 된다.
2. 하나의 문자가 영어인지 확인하는 함수
Public Function IsEnglish(ByVal str As String) As Boolean
Return ((str >= "a" AndAlso str <= "z") OrElse (str >= "A" AndAlso str <= "Z"))
End Function
영어도 한글처럼 코드영역으로 작성해도 되지만 위 소스처럼 대소문자로 범위를 특정해도 무방하다.
이제 위 함수를 이용해서 "abc하이!@#$z끝" 라는 문자열에서 한글이 몇글자이고 영문이 몇글자인지 알아보도록 하자. 간략하게 아래의 소스를 확인하자.
Dim src = "abc하이!@#$z끝"
Dim korcnt As Integer = 0
Dim engcnt As Integer = 0
For Each ch In src
If IsKorean(ch) Then
korcnt += 1
ElseIf IsEnglish(ch) Then
engcnt += 1
End If
Next
Dim str = String.Format("한글은 {0}개, 영문은 {1}개 입니다.", korcnt, engcnt)
MsgBox(str, MsgBoxStyle.OkOnly, "한영")
결과는 아래 이미지처럼 한글 3개(하,이,끝), 영문 4개(a,b,c,z)가 나오게 된다.
여기서 For Each 구문과, String.Format 구문을 간략히 설명하고 넘어가자.
For Each ch In src
...
Next
이 구문은 src라는 문자열을 구성하는 각각의 문자들을 하나씩 루프 돌며 ch 변수에 넣어서 실행하는 구문이다. Mid와 같은 함수를 이용하지 않아도 문자열내 모든 문자들을 처음부터 끝까지 하나씩 루프를 돌게 된다.
String.Format("...{0}...{1}...", val1, val2)
이 구문은 val1, val2 값을 이용해서 문자열을 만들때 유용하게 사용된다. 파라미터는 더 많이 늘릴 수 있으며, 늘릴때마다 숫자를 하나씩 증가시켜주면 되며, 동일한 값이 두번 이상 들어갈때는 아래 소스처럼 동일한 서수를 사용하면 된다.
String.Format("...{0}...{1}...{0}...", val1, val2)
이렇게 사용하면 val1 값이 앞에 {0}과 뒤에 {0}에 동일하게 들어가게 된다.
이번 강좌는 여기까지이며 특수문자가 몇글자인지는 이 예제를 기반으로 직접 생각해서 작성해 보도록 하자.
'VB.NET > 왕초보' 카테고리의 다른 글
VB.NET으로 대용량 엑셀파일 읽기 (2/3) (0) | 2023.09.04 |
---|---|
VB.NET으로 대용량 엑셀파일 읽기 (1/3) (0) | 2023.09.02 |
VB.NET에서 LINQ 쿼리 사용하기 (0) | 2023.04.24 |
VB.NET에서 코드 최적화 기술 익히기 (0) | 2023.04.18 |
VB.NET에서 데이터베이스 트랜잭션 처리하기 (0) | 2023.04.17 |