티스토리 뷰

프로그래밍

VB 문자열 다루기

야라바 2015. 3. 10. 16:07
728x90

앞서 VB.Net 언어 이해하기에서 언급한 것과 같이 문자열은 " " 내부에 유니코드 문자열을 기술한 것이고 데이터 타입의 이름은 String 입니다. 문자열을 표현하는 방법은 워낙 다양해서 이 포스팅을 통해서 언급하기는 어렵고 "인코딩"이란 용어를 만나면 "문자열 표현 방식을 말하는 것이다" 정도로 넘어가셔도 될것 같습니다. 특히 한글 문자열의 경우에는 이전에는 EUC-KR 인코딩을 많이 사용했지만 최근에는 UTF-8(유니코드) 인코딩을 많이 사용하는 추세입니다. "VB에서는 유니코드 인코딩을 사용한다 " 정도만 기억하시면 됩니다. 프로그램을 작성하다 보면 처리의 많은 부분을 문자열(스트링) 처리에 할애하므로 VB 문자열 다루기를 잘 익혀 두시면 프로그래밍을 보다 수월하게 진행하실 수 있습니다.


    Sub Main()
        Dim str1 As String = "He said ""Hello"" to me"
        Dim str2 As String = "Hello"

        Console.WriteLine(str1 & "!")
        Console.WriteLine("Tom said " & """" & str2 & """" & " to me.")
        Console.WriteLine(str1.Replace("Hello", "Go"))
        Console.ReadLine()
    End Sub

위의 코드를 살펴 보면 문자열 내부에 큰 따옴표(")를 입력하고 싶을 때는 ""와 같이 두개를 이어서 입력해야 합니다. 문자열 변수를 초기값 없이 선언하면 그 내용은 Nothing(예약어로 내용 없음을 가리킵니다)이고 따옴표 안에 아무 문자도 없는 ""(Empty)와는 전혀 다른 의미로 사용되므로 주의해야 합니다. 아래의 코드를 실행하면 결과는 "Nothing"으로 출력됩니다. 위의 예제를 살펴 보면 & 연산자로 둘 이상의 문자열을 붙이거나 다른 타입, 예를 들어 문자열과 정수형 자료를 붙여서 하나의 문자열로 만들 수 있습니다. 문자열을 붙일때 & 연산자 대신 +를 사용할 수도 있지만 문자열이 아닌 숫자와 같은 다른 타입을 대상으로 할 경우에는 + 연산자를 사용하면 문자열 붙이기가 아닌 다른 의미로 동작할 수도 있으므로 문자열 처리시에는 &를 사용합니다.


    Sub Main()
        Dim strTest As String

        If strTest = Nothing Then
            Console.WriteLine("Nothing")
        Else
            Console.WriteLine("Empty")
        End If
        Console.ReadLine()
    End Sub

위의 첫번째 코드 예제 중에 str1의 내용에서 "Hello"라는 문자열을 "Go"로 바꾸어 출력하는 Console.WriteLine(str1.Replace("Hello", "Go")) 문장을 주목할 필요가 있습니다. 문자열을 편집하고 재구성하는 작업은 코드에서 사용한 Replace 처럼 다양한 문자열 처리 함수 및 메소드를 통해서 수행합니다. 다양한 함수나 메소드를 활용하는 아주 쉬운 방법은 아래의 그림과 같이 문자열 변수 다음에 마침표(., period)를 찍을 때 나오는 자동 완성 후보와 해당 함수나 메소드의 풍선 도움말을 참조하는 것입니다. 물론 어떤 함수들이 있는지 기억해두면 활용하기에 더욱 유용하겠지요.





다음은 자주 사용하는 문자열 처리 함수 및 메소드의 간단한 설명입니다.

  • 문자열 비교 : 두 문자열이 동일한지 아니면 어느 쪽 큰지를 알려줍니다.
    strcomp(문자열1, 문자열2) ☜ 같으면 0, 문자열1이 작으면 -1 리턴
    String.Compare(문자열1, 문자열2)  strcomp와 같은 방식, 3번째 파라미터로 대소문자 구별 여부를 True/False로 지정할 수 있습니다.
    문자열변수.Equals(문자열) ☜ 같으면 True 리턴
    문자열변수.CompareTo(문자열)  strcomp와 같은 방식

  • 문자열 변환 : 문자열을 다른 형태로 변환하거나 다른 타입 간 변환에 사용
    StrConv(문자열, 변환 방식) ☜ 문자열을 지정한 방식으로 변환. 방식에는 VbStrConv.Lowercase, VbStrConv.Uppercase 등이 있습니다.
    CStr(값), 변수.ToString() Str(숫자)  다른 타입의 값 또는 변수를 문자열로 변환합니다.
    Format(값, 형식), String.Format(값, 형식 ☜ 형식으로 지정한 형식에 맞도록 값을 변환해 줍니다. 변수.ToString(형식)도 동일한 효과를 가져옵니다. 자세한 형식 지정 방법은 https://msdn.microsoft.com/ko-kr/library/microsoft.visualbasic.strings.format(v=vs.110).aspx를 참조하세요. 미리 정의되어 있는 형식을 간편하게 사용할 수도 있는데 g는 콤마 없는 단순한 숫자, c는 시스템 설정에 따라 화폐 단위 표시, n은 소숫점 두자리와 함께 콤마 표시, d는 십진 표현, x/X는 16진수 표현, p는 퍼센트 표시 등입니다. 
    Lcase(문자열), Ucase(문자열), 문자열변수.ToLower(), 문자열변수.ToUpper()  대/소문자변환
    Val(문자열) ☜ 숫자로 구성된 문자열을 숫자로 변환

  • 문자열 복사 및 생성 : VB에서는 문자열에 대한 변환이나 복사등의 작업을 할 때 마다 기존 자료에 변경을 가하는 것이 아니라 변환된 새로운 문자열이 생기는 것으로 이해해야 합니다.
    문자열 변수 = 문자열 
    ☜ = 연산자 우측 문자열과 동일한 저장소를 가리키지 않고 내용이 동일한 새로운 문자열이 만들어 집니다. String.Copy(문자열)과 동일한 기능을 합니다.
    Space(개수) ☜ 개수로 지정한 길이의 공백으로 이루어진 문자열 리턴


  • 문자열 분할 및 추출 : 문자열을 특정 문자나 문자열을 기준으로 나누거나 일부를 잘라내는데 사용합니다.
    문자열변수.
    Split(구분자) ☜ 구분자로 문자열을 자르고 잘라진 각 조각을 문자열 배열로 리턴합니다
    Mid(문자열, 시작, 길이) 
     ☜ 문자열의 시작위치부터(1이 맨 처음) 길이 만큼 추출합니다. 길이 생략 가능
    문자열변수.Substring(
    시작, 길이) ☜ 문자열의 시작위치부터(0이 맨 처음) 길이 만큼 추출합니다. 길이 생략 가능
    Left(문자열, 
    길이) ☜ 문자열의 좌측에서 길이만큼 추출
    Right(문자열, 길이) ☜ 문자열의 우측에서 길이만큼 추출

  • 문자열 삽입, 추가 및 삭제 : 문자열의 공백을 제거하거나 다른 문자열을 삽입 및 붙이기 용도에 사용합니다.
    문자열 & 문자열 
     두 문자열을 하나로 합치는 것으로 문자열 간에는 + 연산자를 사용할 수도 있지만 다른 타입을 섞어서 하나의 문자열로 만드는 경우에는 & 연산자를 사용합니다. 
    String.Concat(문자열, 문자열)
      문자열을 묶어서 하나의 문자열로 리턴합니다. 4개까지의 문자열을 파라미터로 사용할수도 있고 배열을 입력으로 하여 배열의 각 항목을 한 문자열로 붙일 수도 있습니다.
    String.Join(연결자, 배열)
      Split과 반대되는 기능으로 연결자를 가지고 배열의 내용을 하나의 문자열로 만듭니다.
    문자열변수.
    Insert(삽입위치, 문자열) ☜ 삽입 위치(0이 맨 처음)에 문자열을 삽입한 새로운 문자열 리턴
    LSet(문자열, 폭), RSet(문자열, 폭) ☜ 문자열의 크기를 지정한 폭에 좌/우맞춤하여 리턴
    문자열변수.
    PadLeft(폭), 문자열변수.PadRight(폭) ☜ 좌/우측에 공백을 채워서 지정한 폭으로 맞춤
    문자열변수.Trim(), LTrim(문자열)RTrim(문자열)Trim(문자열☜ 문자열의 좌/우측 또는 양쪽의 공백을 제거


  • 문자열 찾기및 바꾸기 : 문자열에서 특정한 문자나 문자열을 찾거나 대치시킬 때 사용함
    문자열변수.TrimStart(문자), 문자열변수.TrimEnd(문자) ☜ 문자열에서 공백대신 문자 또는 문자 배열({" "C, "'"C} 와 같이 표현)로 지정한 문자를 시작위치/끝위치부터 찾아 제거 대상이 아니면 멈춤
    문자열변수.
    Remove(시작, 길이) ☜ 문자열의 시작위치부터(0이 맨 처음) 길이 만큼 삭제한 문자열 리턴
    문자열변수.Replace(기존값, 새값☜ 문자열에서 기존값을 찾아 새값으로 대치시킨 문자열 리턴
    InStr(검색대상, 문자열) ☜ 검색 대상에서 문자열을 찾아 그 위치 리턴.(1이 맨 처음) 0은 찾지 못함.
    문자열변수.
    IndexOf(문자열) ☜ 검색 대상에서 문자열을 찾아 그 위치 리턴.(0이 맨 처음) -1은 찾지 못함.
    문자열변수.LastIndexOf(문자열) ☜ 검색 대상에서 문자열을 찾아 그 마지막 위치 리턴.(0이 맨 처음) -1은 찾지 못함.
    Len(문자열), 
    문자열변수.Length ☜ 문자열의 길이 추출
    문자열변수.Contains(문자열) 
    ☜ 문자열내에 특정 문자열이 있으면 True 리턴
    Asc(문자) 
    ☜ 문자에 해당하는 코드 값 리턴
    Chr(코드값)
     ☜ 코드값에 해당하는 문자 리턴


위에서 언급한것과 같이 자주 사용하는 문자열 처리 함수와 문자열 변수의 자동 완성 기능과 팝업 도움말을 활용하시면 별도의 매뉴얼이나 사용법 검색 없이도 충분히 활용할 수 있습니다. 간단한 프로그램으로 각 함수의 실제 동작을 꼭 확인해 보세요! 아래에 예제를 첨부합니다.


     Sub Main()
        Dim strTest As String = "This is sample english text"

        Console.WriteLine(strTest)
        Console.WriteLine("Replace ==> " & strTest.Replace("english", "국어"))
        Console.WriteLine("Format ==> Currency " & Format(100000, "C") & 
                                   " Percent ==>" & Format(0.23, "p"))
        Console.WriteLine("Split ==> " & strTest.Split(" "c).Length)    '배열의 길이 표시
        Console.WriteLine("Join ==> " & String.Join("_"c, strTest.Split(" "c)))
        Console.WriteLine("IndexOf ==> " & strTest.IndexOf("is") & " LastIndexOf ==> " & 
                                  strTest.LastIndexOf("is"))
        Console.ReadLine()
    End Sub



728x90
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함