Practical Rune Handling
Rune Manipulation Techniques
String to Rune Conversion
package main
import "fmt"
func main() {
// Converting string to rune slice
text := "Hello, 世界"
runes := []rune(text)
fmt.Printf("Original string length: %d\n", len(text))
fmt.Printf("Rune slice length: %d\n", len(runes))
}
Common Rune Operations
graph TD
A[Rune Handling] --> B[Conversion]
A --> C[Iteration]
A --> D[Manipulation]
A --> E[Validation]
Rune Iteration Patterns
Method |
Use Case |
Performance |
range |
Simple iteration |
High |
utf8.DecodeRune |
Precise control |
Medium |
Manual indexing |
Complex processing |
Low |
Advanced Rune Iteration
package main
import (
"fmt"
"unicode"
)
func analyzeText(text string) {
var letterCount, spaceCount, symbolCount int
for _, r := range text {
switch {
case unicode.IsLetter(r):
letterCount++
case unicode.IsSpace(r):
spaceCount++
case unicode.IsPunct(r):
symbolCount++
}
}
fmt.Printf("Letters: %d, Spaces: %d, Symbols: %d\n",
letterCount, spaceCount, symbolCount)
}
func main() {
text := "Hello, World! 你好,世界!"
analyzeText(text)
}
Rune Manipulation Techniques
Reversing a String
func reverseString(s string) string {
runes := []rune(s)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
return string(runes)
}
func main() {
original := "Hello, 世界"
reversed := reverseString(original)
fmt.Println(reversed)
}
Unicode Character Properties
func examineRune(r rune) {
fmt.Printf("Rune: %c\n", r)
fmt.Printf("Is Letter: %v\n", unicode.IsLetter(r))
fmt.Printf("Is Number: %v\n", unicode.IsNumber(r))
fmt.Printf("Is Space: %v\n", unicode.IsSpace(r))
}
func main() {
examineRune('A')
examineRune('7')
examineRune('世')
}
- Minimize conversions between string and []rune
- Use range for most iterations
- Leverage unicode package for character analysis
Practical Use Cases
- Text processing
- Internationalization
- Character-level analysis
- Complex string manipulations
By mastering these rune handling techniques, developers using LabEx can create more robust and flexible text processing solutions in Go.