こんにちは。KOUKIです。
とある企業でGo言語を使ったWebのシステム開発をしています。
今日は、Go言語で文字列抽出方法を学びましょう。
<目次>
実装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
package main import ( "fmt" "unicode" ) func main() { const text = `orem ipsum dolor sit amet, consectetur adipiscing elit. Nam feugiat, eros quis porta tincidunt, dui arcu scelerisque nisi, aliquet tempus orci velit eu quam. Pellentesque nisi erat, ullamcorper sit amet finibus eu, vehicula ut erat. Sed pulvinar ac sapien at vestibulum. Donec in lorem vulputate, lobortis massa sed, imperdiet lacus. Fusce eu orci cursus, malesuada nisi scelerisque, molestie mi. Nullam pharetra elit ut mi vehicula, sed elementum lectus viverra. Cras sed tempus sapien, laoreet feugiat eros. Sed interdum nisl lacinia arcu sollicitudin porta. ` // 40行でとりあえず区切る const maxWidth = 40 // line width var lw int for _, r := range text { // textの1文字ずつをここで出力 fmt.Printf("%c", r) switch lw++; { case lw > maxWidth && r != '\n' && unicode.IsSpace(r): fmt.Println() fallthrough // 下位のcase文を条件チェックなしで実行できる case r == '\n': lw = 0 } } } |
このコードは、text変数に格納された文字列を40文字ずつ、コンソール上に出力してくれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ go run main.go orem ipsum dolor sit amet, consectetur adipiscing elit. Nam feugiat, eros quis porta tincidunt, dui arcu scelerisque nisi, aliquet tempus orci velit eu quam. Pellentesque nisi erat, ullamcorper sit amet finibus eu, vehicula ut erat. Sed pulvinar ac sapien at vestibulum. Donec in lorem vulputate, lobortis massa sed, imperdiet lacus. Fusce eu orci cursus, malesuada nisi scelerisque, molestie mi. Nullam pharetra elit ut mi vehicula, sed elementum lectus viverra. Cras sed tempus sapien, laoreet feugiat eros. Sed interdum nisl lacinia arcu sollicitudin porta. |
結構便利そうですよね^^
「何らかのデータを整形したい」とかに使えそうです!
unicode.IsSpaceについて
unicode.IsSpaceだけ解説しておきます。
これは引数に渡した文字が「‘\t’, ‘\n’, ‘\v’, ‘\f’, ‘\r’, ‘ ‘, 0x85, 0xA0:」でないかをチェックします。
これがないと出力結果はどうなるでしょうか。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ go run main.go orem ipsum dolor sit amet, consectetur ad ipiscing elit. Nam feugiat, eros quis por ta tincidunt, dui arcu scelerisque nisi, aliquet tempus orci velit eu quam. Pellentesque nisi erat, ullamcorper sit a met finibus eu, vehicula ut erat. Sed pul vinar ac sapien at vestibulum. Donec in l orem vulputate, lobortis massa sed, imper diet lacus. Fusce eu orci cursus, malesuada nisi scel erisque, molestie mi. Nullam pharetra eli t ut mi vehicula, sed elementum lectus vi verra. Cras sed tempus sapien, laoreet fe ugiat eros. Sed interdum nisl lacinia arc u sollicitudin porta. |
結果の通り、文字の途中で改行されてしまうわけです。
これを防ぐために、IsSpaceで文字チェックを入れています。
最近のコメント