Go言語 – 13.文字列処理
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
}






