Go言語 – 13.文字列処理

2019-02-06Go言語

Go言語 文字列処理

今回は「文字列処理」について説明します。
stringsパッケージは文字列操作を行う関数を提供します。

文字列の結合

package main

import "fmt"

func main() {
    s := "ABCD"
    s = s + "efgh"
    fmt.Println(s) // "ABCDefgh"
}

文字列の検索

Contains関数は、文字列の中に別の文字列が存在するかどうかを返します。
ContainsAny関数は、文字列の中に別の文字列に含まれる文字のいずれかが存在するかどうかを返します。

package main

import "fmt"
import "strings"

func main() {
    fmt.Println(strings.Contains("abcdefg", "cde")) // true
    fmt.Println(strings.Contains("abcdefg", "abg")) // false
    fmt.Println(strings.ContainsAny("abcdefg", "abg")) // true
    fmt.Println(strings.ContainsAny("abcdefg", "123")) // false
}

HasPrefix関数は、文字列が別の文字列で開始しているかを判別します。
HasSuffix関数は、文字列が別の文字列で終端しているかを判別します。

package main

import "fmt"
import "strings"

func main() {
    fmt.Println(strings.HasPrefix("abcdefg", "abc")) // true
    fmt.Println(strings.HasPrefix("abcdefg", "bcd")) // false
    fmt.Println(strings.HasSuffix("abcdefg", "def")) // false
    fmt.Println(strings.HasSuffix("abcdefg", "efg")) // true
}

文字列中の指定文字列の出現位置をにはIndex関数、最後の出現位置を求めるにはLastIndex関数、指定文字列をカウントするには、Count関数を使用します。

package main

import "fmt"
import "strings"

func main() {
    s := "Alfa Bravo Charlie Delta Echo Foxtrot Golf"
    fmt.Println(strings.Index(s, "Delta")) // 19
    fmt.Println(strings.Index(s, "Hotel")) // -1

    fmt.Println(strings.LastIndex(s, "a")) // 23

    fmt.Println(strings.Count(s, "a")) // 4
}

文字列の大文字、小文字変換

ToUpper関数、ToLower関数で、文字列を大文字・小文字に変換することができます。

package main

import "fmt"
import "strings"

func main() {
    base := "aBcDeF"
    fmt.Println(strings.ToUpper(base)) // ABCDEF
    fmt.Println(strings.ToLower(base)) // abcdef
}

文字列のトリム

指定した文字を文字列の先端から取り除くにはTrimLeft関数、末尾から取り除くにはTrimRight関数、両端から取り除くには、Trim関数を使用します。
指定した文字例を文字列の先端から取り除くにはTrimPrefix関数、末尾から取り除くにはTrimSuffix関数を使用します。TrimLeft関数、TrimRight関数との違いは、文字列マッチだと言うことです。
TrimSpace
関数で文字列の両端からスペースを取り除くことができます。

package main

import "fmt"
import "strings"

func main() {
    base := "!!!?!?? abcdef???!!!"
    fmt.Println(strings.TrimLeft(base, "!")) // "?!?? abcdef???!!!"
    fmt.Println(strings.TrimRight(base, "!?")) // "!!!?!?? abcdef"
    fmt.Println(strings.TrimPrefix(base, "!!")) // "!?!??   abcdef???!!!"
    fmt.Println(strings.TrimSuffix(base, "!!")) // "!!!?!??   abcdef???!"
    fmt.Println(strings.Trim(base, "!? ")) // "abcdef"
    base1 := " abcdef "
    fmt.Println(strings.TrimSpace(base1)) // "abcdef"
}

文字列の置換

文字列置換を行うにはReplace関数を使用します。引数は左から順にベース文字列、置換前の部分文字列、置換後の部分文字列、最大置換回数です。ベース文字列中の全ての部分文字列を置換する場合は、最大置換回数に-1を指定します。

package main

import "fmt"
import "strings"

func main() {
    base := "abcabcabcabc"
    fmt.Println(strings.Replace(base, "bc", "yz", 2)) // "ayzayzabcabc"
    fmt.Println(strings.Replace(base, "abc", "xyz", -1)) // "xyzxyzxyzxyz"
}

指定した文字列を繰り返すにはRepeat関数、タイトルケースへの変換には、TiTle関数を使用します。

package main

import "fmt"
import "strings"

func main() {
    base := "abc"
    fmt.Println(strings.Repeat(base, 3)) // "abcabcabc"
    s := "alfa bravo charlie delta echo foxtrot golf"
    fmt.Println(strings.Title(s)) // "Alfa Bravo Charlie Delta Echo Foxtrot Golf"
}

文字列の分割

セパレータを用いて文字列をスライスに分割するにはSplit関数を使用します。また、分割後の要素数を限定する場合はSplitN関数を使用します。

package main

import "fmt"
import "strings"

func main() {
    base := "ab::cd::efg::hij"
    fmt.Println(strings.Split(base, "::"))     // [ab cd efg hij]
    fmt.Println(strings.SplitN(base, "::", 3)) // [ab cd efg::hij]
}

文字列スライスの結合

スライスの各要素の間を文字列でつなぎ、1つの文字列に結合するにはJoin関数を使用します。

package main

import "fmt"
import "strings"

func main() {
    array := []string{"C:", "work", "abc.txt"}
    fmt.Println(strings.Join(array, "/")) // "C:/work/abc.txt"
}

文字列の変換

strconvパッケージは基本データ型の文字列表現との変換を行う関数を提供します。
指定した文字列を整数変換するにはAtoi関数、浮動小数への変換には、ParseFloat関数を使用します。

package main

import "fmt"
import "strconv"

func main() {
    s1 := "123"
    si, _ := strconv.Atoi(s1)
    si = si + 1
    fmt.Println(si) // 124
    s2 := "123.456"
    sf, _ := strconv.ParseFloat(s2, 64)
    sf = sf + 0.1
    fmt.Println(sf) // 123.556
}

 

株式会社システムトラスト

人材募集中です。

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ