本文将指导你完成文本文档的缩进和取消注释 。
缩进文本文档
Golang 版本
1.12.1
前言
本文将指导你完成文本文档的缩进和取消注释 。
实现
package main
import (
"fmt"
"strconv"
"strings"
"unicode"
)
func main() {
text := "Hi! Go is awesome."
text = Indent(text, 6)
fmt.Println(text)
text = Unindent(text, 3)
fmt.Println(text)
text = Unindent(text, 10)
fmt.Println(text)
text = IndentByRune(text, 10, '.')
fmt.Println(text)
}
// 通过给定的缩进和rune缩进缩进输入
func IndentByRune(input string, indent int, r rune) string {
return strings.Repeat(string(r), indent) + input
}
// 通过给定缩进缩进缩进输入
func Indent(input string, indent int) string {
padding := indent + len(input)
return fmt.Sprintf("% "+strconv.Itoa(padding)+"s", input)
}
// Unindent unindenting输入字符串。如果输入缩进小于“缩进”空格,则删除两者的最小值。
func Unindent(input string, indent int) string {
count := 0
for _, val := range input {
if unicode.IsSpace(val) {
count++
}
if count == indent || !unicode.IsSpace(val) {
break
}
}
return input[count:]
}
$ go run main.go
Hi! Go is awesome.
Hi! Go is awesome.
Hi! Go is awesome.
..........Hi! Go is awesome.
原理
缩进和填充一样简单。在本例中,使用了相同的格式化选项。缩进实现的更具可读性的形式可以使用strings
包的Repeat
函数。前面代码中的IndentByRune
函数应用了这种方法。
在本例中,取消缩进意味着删除给定的前导空格数。前面代码中的Unindent
实现删除了最小的前导空格数或给定的缩进。