golang 中unicode包用法

本文转自Golove博客:http://www.cnblogs.com/golove/p/3273585.html

unicode 包中的函数和方法



// latters.go

const (
MaxRune = '\U0010FFFF' // Unicode 码点最大值
ReplacementChar = '\uFFFD' // 代表无效的 Unicode 码点
MaxASCII = '\u007F' // ASCII 码点最大值
MaxLatin1 = '\u00FF' // Latin-1 码点最大值
)

------------------------------------------------------------

// 判断字符 r 是否在 rangtab 表范围内
func Is(rangeTab *RangeTable, r rune) bool

func main() {
s := "Hello 世界!"
for _, r := range s {
// 判断字符是否为汉字
if unicode.Is(unicode.Scripts["Han"], r) {
fmt.Printf("%c", r) // 世界
}
}
}

------------------------------------------------------------

// 判断字符 r 是否为大写格式
func IsUpper(r rune) bool

func main() {
s := "Hello ABC!"
for _, r := range s {
// 判断字符是否为大写
if unicode.IsUpper(r) {
fmt.Printf("%c", r) // HABC
}
}
}

------------------------------------------------------------

// 判断字符 r 是否为小写格式
func IsLower(r rune) bool

func main() {
s := "Hello abc!"
for _, r := range s {
if unicode.IsLower(r) {
fmt.Printf("%c", r) // elloabc
}
}
}

------------------------------------------------------------

// 判断字符 r 是否为 Unicode 规定的 Title 字符
// 大部分字符的 Title 格式就是其大写格式
// 只有少数字符的 Title 格式是特殊字符
// 这里判断的就是特殊字符
func IsTitle(r rune) bool

func main() {
s := "Hello ᾏᾟᾯ!"
for _, r := range s {
if unicode.IsTitle(r) {
fmt.Printf("%c", r) // ᾏᾟᾯ
}
}
}

// 输出 Unicode 规定的 Title 字符
func main() {
for _, cr := range unicode.Lt.R16 {
for i := cr.Lo; i <= cr.Hi; i += cr.Stride {
fmt.Printf("%c", i)
}
fmt.Println("")
}
}

------------------------------------------------------------

// To 将字符 r 转换为指定的格式
// _case 取值:UpperCase、LowerCase、TitleCase
func To(_case int, r rune) rune

func main() {
s := "Hello 世界!"
for _, r := range s {
fmt.Printf("%c", unicode.To(unicode.UpperCase, r))
} // HELLO 世界!
for _, r := range s {
fmt.Printf("%c", unicode.To(unicode.LowerCase, r))
} // hello 世界!
for _, r := range s {
fmt.Printf("%c", unicode.To(unicode.TitleCase, r))
} // HELLO 世界!
}

------------------------------------------------------------

// ToUpper 将字符 r 转换为大写格式
func ToUpper(r rune) rune

func main() {
s := "Hello 世界!"
for _, r := range s {
fmt.Printf("%c", unicode.ToUpper(r))
} // HELLO 世界!
}

------------------------------------------------------------

// ToLower 将字符 r 转换为小写格式
func ToLower(r rune) rune

func main() {
s := "Hello 世界!"
for _, r := range s {
fmt.Printf("%c", unicode.ToLower(r))
} // hello 世界!
}

------------------------------------------------------------

// ToTitle 将字符 r 转换为 Title 格式
// 大部分字符的 Title 格式就是其大写格式
// 只有少数字符的 Title 格式是特殊字符
func ToTitle(r rune) rune

func main() {
s := "Hello 世界!"
for _, r := range s {
fmt.Printf("%c", unicode.ToTitle(r))
} // HELLO 世界!
}

------------------------------------------------------------

// SpecialCase 是特定语言环境下的映射表,例如“土耳其”
// SpecialCase 的方法集定制了标准的映射
type SpecialCase []CaseRange

------------------------------------------------------------

// ToUpper 将 r 转换为大写格式
// 优先使用指定的映射表 special
func (special SpecialCase) ToUpper(r rune) rune

func main() {
s := "Hello 世界!"
for _, r := range s {
fmt.Printf("%c", unicode.SpecialCase(unicode.CaseRanges).ToUpper(r))
} // HELLO 世界!
}

------------------------------------------------------------

// ToLower 将 r 转换为小写格式
// 优先使用指定的映射表 special
func (special SpecialCase) ToLower(r rune) rune

func main() {
s := "Hello 世界!"
for _, r := range s {
fmt.Printf("%c", unicode.SpecialCase(unicode.CaseRanges).ToLower(r))
} // hello 世界!
}

------------------------------------------------------------

// ToTitle 将 r 转换为 Title 格式
// 优先使用指定的映射表 special
func (special SpecialCase) ToTitle(r rune) rune

func main() {
s := "Hello 世界!"
for _, r := range s {
fmt.Printf("%c", unicode.SpecialCase(unicode.CaseRanges).ToTitle(r))
} // HELLO 世界!
}

------------------------------------------------------------

// SimpleFold 遍历 Unicode ,查找“下一个”与 r 相当的字符,
// “下一个”的意思是:码点值比 r 大且最靠近 r 的字符
// 如果没有“下一个”字符,则从头开始找与 r 相当的字符
// “相当”的意思是:同一个字符在不同情况下有不同的写法
// 这些不同写法的字符是相当的。
// 这个函数通过查询 caseOrbit 表实现
//
// 例如:
// SimpleFold('A') = 'a'
// SimpleFold('a') = 'A'
//
// SimpleFold('K') = 'k'
// SimpleFold('k') = '\u212A' (开尔文符号:K)
// SimpleFold('\u212A') = 'K'
//
// SimpleFold('1') = '1'
//
func SimpleFold(r rune) rune

func main() {
fmt.Printf("%c\n", unicode.SimpleFold('Φ')) // φ
fmt.Printf("%c\n", unicode.SimpleFold('φ')) // ϕ
fmt.Printf("%c\n", unicode.SimpleFold('ϕ')) // Φ
}



============================================================



// digit.go

------------------------------------------------------------

// IsDigit 判断 r 是否为一个十进制的数字字符
func IsDigit(r rune) bool

func main() {
s := "Hello 123123!"
for _, r := range s {
fmt.Printf("%c = %v\n", r, unicode.IsDigit(r))
} // 123123 = true
}



============================================================



// graphic.go

------------------------------------------------------------

// IsGraphic 判断字符 r 是否为一个“图形字符”
// “图形字符”包括字母、标记、数字、标点、符号、空格
// 他们分别对应于 L、M、N、P、S、Zs 类别
// 这些类别是 RangeTable 类型,存储了相应类别的字符范围
func IsGraphic(r rune) bool

func main() {
s := "Hello 世界!\t"
for _, r := range s {
fmt.Printf("%c = %v\n", r, unicode.IsGraphic(r))
} // \t = false
}

------------------------------------------------------------

// IsPrint 判断字符 r 是否为 Go 所定义的“可打印字符”
// “可打印字符”包括字母、标记、数字、标点、符号和 ASCII 空格
// 他们分别对应于 L, M, N, P, S 类别和 ASCII 空格
// “可打印字符”和“图形字符”基本是相同的,不同之处在于
// “可打印字符”只包含 Zs 类别中的 ASCII 空格(U+0020)
func IsPrint(r rune) bool

func main() {
s := "Hello 世界!\t"
for _, r := range s {
fmt.Printf("%c = %v\n", r, unicode.IsPrint(r))
} // 全角空格= false \t = false
}

------------------------------------------------------------

// IsOneOf 判断 r 是否在 set 表范围内
func IsOneOf(set []*RangeTable, r rune) bool

func main() {
s := "Hello 世界!"
// set 表设置为“汉字、标点符号”
set := []*unicode.RangeTable{unicode.Han, unicode.P}
for _, r := range s {
fmt.Printf("%c = %v\n", r, unicode.IsOneOf(set, r))
} // 世界! = true
}

------------------------------------------------------------

// IsControl 判断 r 是否为一个控制字符
// Unicode 类别 C 包含更多字符,比如代理字符
// 使用 Is(C, r) 来测试它们
func IsControl(r rune) bool

func main() {
s := "Hello\n\t世界!"
for _, r := range s {
fmt.Printf("%c = %v\n", r, unicode.IsControl(r))
} // \n\t = true
}

------------------------------------------------------------

// IsLetter 判断 r 是否为一个字母字符 (类别 L)
// 汉字也是一个字母字符
func IsLetter(r rune) bool

func main() {
s := "Hello\n\t世界!"
for _, r := range s {
fmt.Printf("%c = %v\n", r, unicode.IsLetter(r))
} // Hello世界 = true
}

------------------------------------------------------------

// IsMark 判断 r 是否为一个 mark 字符 (类别 M)
func IsMark(r rune) bool

func main() {
s := "Hello ៉៊់៌៍!"
for _, r := range s {
fmt.Printf("%c = %v\n", r, unicode.IsMark(r))
} // ៉៊់៌៍ = true
}

// 输出所有 mark 字符
func main() {
for _, cr := range unicode.M.R16 {
for i := uint16(cr.Lo); i >= cr.Lo && i <= cr.Hi; i += uint16(cr.Stride) {
fmt.Printf("%c = %v\n", i, unicode.IsMark(rune(i)))
}
fmt.Println("")
}
}

------------------------------------------------------------

// IsNumber 判断 r 是否为一个数字字符 (类别 N)
func IsNumber(r rune) bool

func main() {
s := "Hello 123123!"
for _, r := range s {
fmt.Printf("%c = %v\n", r, unicode.IsNumber(r))
} // 123123 = true
}

------------------------------------------------------------

// IsPunct 判断 r 是否为一个标点字符 (类别 P)
func IsPunct(r rune) bool

func main() {
s := "Hello 世界!"
for _, r := range s {
fmt.Printf("%c = %v\n", r, unicode.IsPunct(r))
} // ! = true
}

------------------------------------------------------------

// IsSpace 判断 r 是否为一个空白字符
// 在 Latin-1 字符集中,空白字符为:\t, \n, \v, \f, \r,
// 空格, U+0085 (NEL), U+00A0 (NBSP)
// 其它空白字符的定义有“类别 Z”和“Pattern_White_Space 属性”
func IsSpace(r rune) bool

func main() {
s := "Hello \t世 界!\n"
for _, r := range s {
fmt.Printf("%c = %v\n", r, unicode.IsSpace(r))
} // 空格\t全角空格\n = true
}

------------------------------------------------------------

// IsSymbol 判断 r 是否为一个符号字符
func IsSymbol(r rune) bool

func main() {
s := "Hello (<世=界>)"
for _, r := range s {
fmt.Printf("%c = %v\n", r, unicode.IsSymbol(r))
} // <=> = true
}




Golang,基本数据类型括整型、浮点型、布尔型、字符串和字符型。引用数据类型括数组、切片、映射、结构体和接口。 1. 整型:Golang提供了多种整型,括int、int8、int16、int32、int64、uint、uint8、uint16、uint32和uint64等。它们分别表示有符号和无符号的整数,不同类型的整数有不同的取值范围。 2. 浮点型:Golang提供了两种浮点型,即float32和float64。它们分别表示单精度和双精度浮点数,用于表示小数。 3. 布尔型:Golang的布尔型只有两个取值,即true和false。用于表示逻辑值。 4. 字符串:Golang的字符串是一系列字节的集合使用双引号或反引号括起来。字符串是不可变的,可以通过索引访问其的字符。 5. 字符型:Golang的字符类型使用单引号括起来,表示一个Unicode字符。 引用数据类型: 1. 数组:数组是一组具有相同类型的元素的集合,长度固定。可以通过索引访问数组的元素。 2. 切片:切片是对数组的抽象,它可以动态增长和缩小。切片是一个引用类型,可以通过切片操作符[:]来获取子切片。 3. 映射:映射是一种无序的键值对集合,也称为字典或哈希表。可以通过键来访问对应的值。 4. 结构体:结构体是一种自定义的数据类型,可以含多个字段,每个字段可以有不同的类型。结构体用于组织和存储相关的数据。 5. 接口:接口是一种抽象类型,定义了一组方法的集合。接口可以被其他类型实现,实现了接口的类型可以被当作该接口类型使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值