🦔
【Go】競プロ以前の基本的な文字列操作
はじめに
LeetCodeをGoでやるにあたって、基本的な文字列操作をまとめました。初学者はもちろん、Go以外のプログラミング言語の経験がある方にも刺さるかもしれません。
stringを1文字ずつ(rune)の配列に変換
他のプログラミング言語のように文字列のインデックスを指定しても文字が取れないことがあるので、変換する
import "fmt"
func main() {
str := "abcde"
runes := []rune(str)
fmt.Println(runes)
// runeはUnicodeコードポイントとして扱われる
// [97 98 99 100 101]
}
rune配列を連結
stringにキャストする
import "fmt"
func main() {
str := "abcde"
runes := []rune(str)
fmt.Println(string(runes))
// abcde
}
文字が〇〇かどうか
import (
"fmt"
"unicode"
)
func main() {
// runeを初期化する際はシングルクォーテーションで囲む
digit := '1'
char := 'a'
// 0-9かどうか
if unicode.IsDigit(digit) {
fmt.Println("変数digitは数字が入っています")
}
// a-z, A-Zかどうか
if unicode.IsLetter(char) {
fmt.Println("変数charは文字が入っています")
}
}
文字を大文字/小文字に変換
import (
"fmt"
"strings"
"unicode"
func main() {
lstr, ustr := "abcde", "VWXYZ"
// stringはstrings.ToUpper/ToLower
fmt.Println(strings.ToUpper(lstr)) // ABCDE
fmt.Println(strings.ToLower(ustr)) // vwxyz
lchar, uchar := 'a', 'Z'
// runeはunicode.ToUpper/ToLower
fmt.Println(unicode.ToUpper(lchar)) // 65
fmt.Println(unicode.ToLower(uchar)) // 122
}
stringの数値をint配列に変換
stringの数値を各桁毎に分割してint配列としたり、int配列をまとめて1つの数字としたりします。
import "fmt"
func main() {
numStr := "9876"
intArr := make([]int, len(numStr))
for idx, c := range numStr {
intArr[idx] = int(c - '0')
}
fmt.Println(intArr) // [9 8 7 6]
// int配列をつなげて1つの数字にする
result := 0
for _, val := range intArr {
result = result * 10 + val
}
fmt.Println(result) // 9876
}
Discussion