🦔

【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