Golang에서 문자열을 슬라이스로 분할

10384 단어 go


게시물Splitting a String into a Slice in GolangQvault에 처음 등장했습니다.

Go에서 문자열을 얼마나 자주 분할하는지 말할 수 없습니다. 종종 저는 환경 변수에서 쉼표로 구분된 목록을 구문 분석하고 있으며 Go의 표준 라이브러리는 이러한 종류의 조작을 위한 훌륭한 도구를 제공합니다.

  • Split by commas or other delimiters
  • strings.Split
  • strings.SplitN



  • Split by delimiters and retain the delimiters
  • strings.SplitAfter
  • strings.SplitAfterN

  • Split by whitespace and newlines
  • Split using a regex

  • 쉼표 또는 기타 구분 기호로 나누기



    strings.Split()



    Go의 풍부한 표준 라이브러리를 사용하면 문자열을 정말 쉽게 분할할 수 있습니다. Go에서 문자열을 분할해야 하는 시간의 99%는 strings 패키지의 strings.Split() function 을 원할 것입니다.

    package main
    
    import (
        "fmt"
        "strings"
    )
    
    func main() {
        fruitsString := "apple,banana,orange,pear"
        fruits := strings.Split(fruitsString, ",")
        fmt.Println(fruits)
        // prints ["apple", "banana", "orange", "pear"]
    }
    
    


    strings.SplitN()



    strings.SplitN() 함수는 분할할 문자열, 구분 기호 및 슬라이스의 결과 문자열 수의 세 가지 인수를 사용합니다.

    솔직히 저는 이 기능을 자주 사용하지 않지만 큰 문서를 작업하고 처음 몇 문장이나 그 줄에 있는 내용에만 관심이 있는 경우 유용할 수 있습니다.

    package main
    
    import (
        "fmt"
        "strings"
    )
    
    func main() {
        fruitsString := "apple.banana.orange.pear"
        fruits := strings.SplitN(fruitsString, ".", 3)
        fmt.Println(fruits)
        // prints ["apple", "banana", "orange.pear"]
    }
    


    구분 기호로 분할하고 구분 기호 유지



    strings.SplitAfter()


    Split() , SplitAfter() 와 유사하게 원래 문자열을 분할하지만 각 하위 문자열 끝에 구분 기호를 남겨 둡니다.

    package main
    
    import (
        "fmt"
        "strings"
    )
    
    func main() {
        fruitsString := "apple.banana.orange.pear"
        fruits := strings.SplitAfter(fruitsString, ".")
        fmt.Println(fruits)
        // prints ["apple.", "banana.", "orange.", "pear"]
    }
    


    strings.SplitAfterN()


    SplitAfterN는 첫 번째SplitAfter 하위 문자열만 분할한다는 점을 제외하면 N와 동일한 작업을 수행합니다. 다른 모든 것은 최종 하위 문자열에 유지됩니다.

    package main
    
    import (
        "fmt"
        "strings"
    )
    
    func main() {
        fruitsString := "apple.banana.orange.pear"
        fruits := strings.SplitAfterN(fruitsString, ".", 2)
        fmt.Println(fruits)
        // prints ["apple.", "banana.orange.pear"]
    }
    


    공백과 개행으로 분할



    strings 패키지는 제공된 구분 기호를 기반으로 문자열을 분리하는 것 이상을 수행할 수 있습니다. strings.Fields() function은 모든 공백에서 분할되고 최종 결과에서 제외됩니다. 예를 들어 탭, 공백 및 줄 바꿈은 모두 공백으로 간주됩니다.

    package main
    
    import (
        "fmt"
        "strings"
    )
    
    func main() {
        fmt.Printf("Fields are: %q", strings.Fields(`apple
         banana orange
         pear
         `))
        // prints ["apple", "banana", "orange", "pear"]
    }
    


    정규식을 사용하여 분할



    정규식은 문자열을 조작하는 데 널리 사용되는 방법이며 Go의 내장 정규식 엔진이 도움이 될 수 있습니다. 여기서는 실제로 strings 패키지를 사용할 필요조차 없으며 대신 regexp package 을 사용합니다.

    package main
    
    import (
        "fmt"
        "regexp"
    )
    
    func main() {
        s := regexp.MustCompile("[0-9]").Split("apple1banana2orange3pear", -1)
        fmt.Println(s)
        // prints ["apple", "banana", "orange", "pear"]
    }
    


    Gotcha – Go의 문자열은 특별합니다.



    Java, C 및 Python과 같은 다른 언어보다 많은 문자열Go treats strings differently로 작업할 때 주의하십시오. Go의 문자열은 바이트의 읽기 전용 조각이며 해당 바이트는 임의적입니다. 무엇이든 될 수 있습니다. Go의 문자열은 유니코드 텍스트, UTF-8 텍스트 또는 기타 인코딩 형식을 유지하는 데 필요하지 않습니다.

    읽어 주셔서 감사합니다. 이제 과정을 수강하십시오!

    기술 분야의 고임금 직업에 관심이 있으십니까? 실습 코딩 과정을 마친 후 인터뷰를 시작하고 멋지게 통과합니다.

    Start coding now

    질문?



    질문이나 의견이 있으면 트위터에서 나를 팔로우하고 연락하십시오. 기사에서 실수를 한 경우 반드시 let me know 수정하여 수정할 수 있도록 해주세요!

    Subscribe 받은 편지함으로 바로 전달되는 더 많은 코딩 기사를 보려면 내 뉴스레터로 보내십시오.

    좋은 웹페이지 즐겨찾기