Files
learngo/19-strings-runes-bytes/exercises/03-rune-manipulator/solution/main.go

80 lines
2.1 KiB
Go
Raw Normal View History

2019-04-10 23:14:38 +03:00
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
2019-10-30 19:34:44 +03:00
// For more tutorials : https://learngoprogramming.com
// In-person training : https://www.linkedin.com/in/inancgumus/
// Follow me on twitter: https://twitter.com/inancgumus
2019-04-10 23:14:38 +03:00
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
strings := []string{
"cool",
"güzel",
"jīntiān",
"今天",
"read 🤓",
}
for _, s := range strings {
fmt.Printf("%q\n", s)
// Print the byte and rune length of the strings
// Hint: Use len and utf8.RuneCountInString
fmt.Printf("\thas %d bytes and %d runes\n",
len(s), utf8.RuneCountInString(s))
// Print the bytes of the strings in hexadecimal
// Hint: Use % x verb
fmt.Printf("\tbytes : % x\n", s)
// Print the runes of the strings in hexadecimal
// Hint: Use % x verb
fmt.Print("\trunes :")
for _, r := range s {
fmt.Printf("% x", r)
}
fmt.Println()
// Print the runes of the strings as rune literals
// Hint: Use for range
fmt.Print("\trunes :")
for _, r := range s {
fmt.Printf("%q", r)
}
fmt.Println()
// Print the first rune and its byte size of the strings
// Hint: Use utf8.DecodeRuneInString
r, size := utf8.DecodeRuneInString(s)
fmt.Printf("\tfirst : %q (%d bytes)\n", r, size)
// Print the last rune of the strings
// Hint: Use utf8.DecodeLastRuneInString
r, size = utf8.DecodeLastRuneInString(s)
2021-01-10 11:28:56 -05:00
fmt.Printf("\tlast : %q (%d bytes)\n", r, size)
2019-04-10 23:14:38 +03:00
// Slice and print the first two runes of the strings
_, first := utf8.DecodeRuneInString(s)
_, second := utf8.DecodeRuneInString(s[first:])
fmt.Printf("\tfirst 2 : %q\n", s[:first+second])
// Slice and print the last two runes of the strings
_, last1 := utf8.DecodeLastRuneInString(s)
_, last2 := utf8.DecodeLastRuneInString(s[:len(s)-last1])
fmt.Printf("\tlast 2 : %q\n", s[len(s)-last2-last1:])
// Convert the string to []rune
// Print the first and last two runes
rs := []rune(s)
fmt.Printf("\tfirst 2 : %q\n", string(rs[:2]))
fmt.Printf("\tlast 2 : %q\n", string(rs[len(rs)-2:]))
}
}