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:]))
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |