79 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// For more tutorials: https://blog.learngoprogramming.com
 | 
						|
//
 | 
						|
// Copyright © 2018 Inanc Gumus
 | 
						|
// Learn Go Programming Course
 | 
						|
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
 | 
						|
//
 | 
						|
 | 
						|
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)
 | 
						|
		fmt.Printf("\tfirst   : %q (%d bytes)\n", r, size)
 | 
						|
 | 
						|
		// 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:]))
 | 
						|
	}
 | 
						|
}
 |