Go 语言程序设计——字符串类型(2)
2019-05-05 本文已影响0人
hlemon
格式化布尔值
布尔值使用 %t
(真值) 格式指令来输出
例子:
package main
import (
"fmt"
)
func IntForBool (b bool) int {
if b {
return 1
}
return 0
}
func main() {
fmt.Printf("%t %t\n", true, false)
fmt.Printf("%d %d\n", IntForBool(true), IntForBool(false))
}
也可以使用 strconv.ParseBool()
函数来将字符串转化为布尔值
格式化整数
例子:
package main
import (
"fmt"
"unicode/utf8"
"strings"
)
func main() {
i := 3931
fmt.Printf("|%b|%9b|%-9b|%09b|% 9b|\n", 37, 37, 37, 37, 37)
fmt.Printf("|%o|%#o|%# 8o|%#+ 8o|%+08o|\n", 41, 41, 41, 41, -41)
fmt.Printf("|%x|%X|%8x|%08x|%#04X|0x%04X|\n", i, i, i, i, i, i)
fmt.Printf("|$%d|$%06d|$%+06d|$%s|\n", i, i, i, Pad(i, 6, '*'))
}
func Pad(number, width int, pad rune) string {
s := fmt.Sprint(number)
gap := width - utf8.RuneCountInString(s)
if gap > 0 {
return strings.Repeat(string(pad), gap) + s
}
return s
}
- 使用
#
修饰符可以切换格式,从而在输出时以 0 打头 -
+
修饰符会强制输出正号,如果没有该修饰符,正整数输出时前面没有正号 - 十进制
%d
格式指令,唯一可用于当做填充的字符是空格和 0,但也可以使用自定义函数来填充 -
utf8.RuneCountInString()
函数返回给定字符串的字符数,这个数字永远小于或等于其字节数 -
strings.Repeat()
函数接受一个字符串和一个计数,返回一个将该字符串重复给定次数后产生的字符串
格式化字符
Go 语言的字符都是 rune
(既 int32
值),它可以已数字或者 Unicode 字符的形式输出
格式化浮点数
浮点数格式可以指定整体长度、小数位数,以及使用标准计数法还是科学计数法
例子:
package main
import (
"fmt"
"unicode/utf8"
"strings"
"math"
)
func main() {
for _, x := range []float64{-.258, 7194.84, -60897162.0218, 1.500089e-8} {
fmt.Printf("|%20.5e|%20.5f|%s|\n", x, x, Humanize(x, 20, 5, '*', ','))
}
}
func Humanize(amount float64, width, decimals int, pad, separator rune) string {
dollars, cents := math.Modf(amount)
whole := fmt.Sprint("%+.0f", dollars)[1:]
fraction := ""
if decimals > 0 {
fraction = fmt.Sprintf("%+.*f", decimals, cents)[2:]
}
sep := string(separator)
for i := len(whole) - 3; i > 0; i -= 3 {
whole = whole[:i] + sep + whole[i:]
}
if amount < 0.0 {
whole = "-" + whole
}
number := whole + fraction
gap := width - utf8.RuneCountInString(number)
if gap > 0 {
return strings.Repeat(string(pad), gap) + number
}
return number
}
-
math。Modf()
函数将一个float64
类型的整数部分和小数部分以float64
类型的树的形式返回 -
%e
、%E
、%f
、%g
、%G
格式指令既可以用于复数,也可以用于浮点数 -
%e
和%E
是科学计算法格式(指数的)格式指令
格式化字符串和切片
- Go语言默认是居右对齐,我们可以使用-修饰符来将其居左对齐
为调试格式化
-
%T
(类型)格式指令用于打印一个内置的或者自定义值的类型,而%v
格式指令则用于打印一个内置值的值 - Go语言中有两种类型是同义的:
uint8
和byte
,int32
和rune
其他字符处理相关的包
Go语言处理字符串的强大之处不仅限于对索引和切片的支持,也不限于fmt的格式化功能,strings包提供了非常强大的功能,此外strconv、unicode/utf8、unicode等也提供了大量实用的函数