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

const (
MaxRune = '\U0010FFFF' // Unicode 码点的最大值
ReplacementChar = '\uFFFD' // 表示无效的码点
MaxASCII = '\u007F' // 最大 ASCII 值
MaxLatin1 = '\u00FF' // 最大 Latin-1 值
) ------------------------------------------------------------ // 判断字符 r 是否在 rangtab 范围内。
// 可用的 RangeTable 参见 go/src/unicode/tables.go。
func Is(rangeTab *RangeTable, r rune) bool // RangeTable 定义一个 Unicode 码点集合,包含 16 位和 32 位两个范围列表。
// 这两个列表必须经过排序而且不能重叠。R32 中只能包含大于 16 位的值。
type RangeTable struct {
R16 []Range16
R32 []Range32
LatinOffset int // R16 中 Hi <= MaxLatin1 的条目数。
} // Range16 表示一个 16 位的 Unicode 码点范围。范围从 Lo 到 Hi,具有指定的步长。
type Range16 struct {
Lo uint16
Hi uint16
Stride uint16 // 步长
} // Range32 表示一个 32 位的 Unicode 码点范围。范围从 Lo 到 Hi,具有指定的步长。
// Lo 和 Hi 必须都大于 16 位。
type Range32 struct {
Lo uint32
Hi uint32
Stride uint32 // 步长
} ------------------------------ // 判断字符 r 是否为大写格式
func IsUpper(r rune) bool // 判断字符 r 是否为小写格式
func IsLower(r rune) bool // 判断字符 r 是否为 Unicode 规定的 Title 字符
// 大部分字符的 Title 格式就是其大写格式
// 只有少数字符的 Title 格式是特殊字符
// 这里判断的就是特殊字符
func IsTitle(r rune) bool // ToUpper 将字符 r 转换为大写格式
func ToUpper(r rune) rune // ToLower 将字符 r 转换为小写格式
func ToLower(r rune) rune // ToTitle 将字符 r 转换为 Title 格式
// 大部分字符的 Title 格式就是其大写格式
// 只有少数字符的 Title 格式是特殊字符
func ToTitle(r rune) rune // To 将字符 r 转换为指定的格式
// _case 取值:UpperCase、LowerCase、TitleCase
func To(_case int, r rune) rune ------------------------------ // 示例:判断汉字
func main() {
for _, r := range "Hello 世界!" {
// 判断字符是否为汉字
if unicode.Is(unicode.Scripts["Han"], r) {
fmt.Printf("%c", r) // 世界
}
}
} // 更多 unicode.Scripts 取值请参考:http://www.cnblogs.com/golove/p/3269099.html ------------------------------ // 示例:判断大小写
func main() {
for _, r := range "Hello ABC!" {
// 判断字符是否为大写
if unicode.IsUpper(r) {
fmt.Printf("%c", r) // HABC
}
}
for _, r := range "Hello abc!" {
// 判断字符是否为小写
if unicode.IsLower(r) {
fmt.Printf("%c", r) // elloabc
}
}
for _, r := range "Hello ᾏᾟᾯ!" {
// 判断字符是否为标题
if unicode.IsTitle(r) {
fmt.Printf("%c", r) // ᾏᾟᾯ
}
}
} ------------------------------ // 示例:输出 Unicode 规定的标题字符
func main() {
for _, cr := range unicode.Lt.R16 {
for i := cr.Lo; i <= cr.Hi; i += cr.Stride {
fmt.Printf("%c", i)
}
} // DžLjNjDzᾈᾉᾊᾋᾌᾍᾎᾏᾘᾙᾚᾛᾜᾝᾞᾟᾨᾩᾪᾫᾬᾭᾮᾯᾼῌῼ
} ------------------------------ // 示例:转换大小写
func main() {
s := "Hello 世界!" for _, r := range s {
fmt.Printf("%c", unicode.ToUpper(r))
} // HELLO 世界!
for _, r := range s {
fmt.Printf("%c", unicode.ToLower(r))
} // hello 世界!
for _, r := range s {
fmt.Printf("%c", unicode.ToTitle(r))
} // 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 转换为大写格式
// 优先使用指定的映射表 special
// 可用的 SpecialCase 参见 go/src/unicode/casetables.go。
func (special SpecialCase) ToUpper(r rune) rune // ToLower 将 r 转换为小写格式
// 优先使用指定的映射表 special
func (special SpecialCase) ToLower(r rune) rune // ToTitle 将 r 转换为 Title 格式
// 优先使用指定的映射表 special
func (special SpecialCase) ToTitle(r rune) rune // SpecialCase 表示特定语言的大小写映射,比如土耳其语。
// SpecialCase 的方法可以自定义标准映射(通过重写)。
type SpecialCase []CaseRange // CaseRange 表示一个简单的 Unicode 码点范围,用于大小写转换。
// 在 Lo 和 Hi 范围内的码点,如果要转换成大写,只需要加上 d[0] 即可
// 如果要转换为小写,只需要加上 d[1] 即可,如果要转换为 Title 格式,
// 只需要加上 d[2] 即可。
type CaseRange struct {
Lo uint32
Hi uint32
Delta d // [3]rune
} // CaseRanges 中 Delta 数组的索引。
const (
UpperCase = iota
LowerCase
TitleCase
MaxCase
) // 如果一个 CaseRange 中的 Delta 元素是 UpperLower,则表示这个 CaseRange 是
// 一个有着连续的大写小写大写小写的范围。也就是说,Lo 是大写,Lo+1 是小写,
// Lo+2 是大写,Lo+3 是小写 ... 一直到 Hi 为止。
const (
UpperLower = MaxRune + 1 // 不是一个有效的 Delta 元素
) ------------------------------ // 示例
func main() {
s := "Hello 世界!"
for _, r := range s {
fmt.Printf("%c", unicode.SpecialCase(unicode.CaseRanges).ToUpper(r))
} // HELLO 世界!
for _, r := range s {
fmt.Printf("%c", unicode.SpecialCase(unicode.CaseRanges).ToLower(r))
} // hello 世界!
for _, r := range s {
fmt.Printf("%c", unicode.SpecialCase(unicode.CaseRanges).ToTitle(r))
} // HELLO 世界!
} ------------------------------------------------------------ // SimpleFold 在 Unicode 字符表中从字符 r 开始环绕查找(到尾部后再从头开始)
// 下一个与 r 大小写相匹配的字符(一个字符的大写、小写、标题三者视为大小写相
// 匹配),这个函数遵循 Unicode 定义的大小写环绕匹配表。
//
// 例如:
// SimpleFold('A') = 'a'
// SimpleFold('a') = 'A'
//
// SimpleFold('K') = 'k'
// SimpleFold('k') = 'K' (开尔文符号)
// SimpleFold('K') = 'K'
//
// SimpleFold('1') = '1'
func SimpleFold(r rune) rune ------------------------------ // 示例:SimpleFold
func main() {
s := "ΦφϕkKK"
// 看看 s 里面是什么
for _, c := range s {
fmt.Printf("%x ", c)
}
fmt.Println()
// 大写,小写,标题 | 当前字符 -> 下一个匹配字符
for _, v := range s {
fmt.Printf("%c, %c, %c | %c -> %c\n",
unicode.ToUpper(v),
unicode.ToLower(v),
unicode.ToTitle(v),
v,
unicode.SimpleFold(v),
)
}
} // 输出结果:
// 3a6 3c6 3d5 6b 4b 212a
// Φ, φ, Φ | Φ -> φ
// Φ, φ, Φ | φ -> ϕ
// Φ, ϕ, Φ | ϕ -> Φ
// K, k, K | k -> K
// K, k, K | K -> k
// K, k, K | K -> K ------------------------------------------------------------ // IsDigit 判断 r 是否为一个十进制的数字字符
func IsDigit(r rune) bool // IsNumber 判断 r 是否为一个数字字符 (类别 N)
func IsNumber(r rune) bool // IsLetter 判断 r 是否为一个字母字符 (类别 L)
// 汉字也是一个字母字符
func IsLetter(r rune) bool // IsSpace 判断 r 是否为一个空白字符
// 在 Latin-1 字符集中,空白字符为:\t, \n, \v, \f, \r,
// 空格, U+0085 (NEL), U+00A0 (NBSP)
// 其它空白字符的定义有“类别 Z”和“Pattern_White_Space 属性”
func IsSpace(r rune) bool // IsControl 判断 r 是否为一个控制字符
// Unicode 类别 C 包含更多字符,比如代理字符
// 使用 Is(C, r) 来测试它们
func IsControl(r rune) bool // IsGraphic 判断字符 r 是否为一个“图形字符”
// “图形字符”包括字母、标记、数字、标点、符号、空格
// 他们分别对应于 L、M、N、P、S、Zs 类别
// 这些类别是 RangeTable 类型,存储了相应类别的字符范围
func IsGraphic(r rune) bool // IsPrint 判断字符 r 是否为 Go 所定义的“可打印字符”
// “可打印字符”包括字母、标记、数字、标点、符号和 ASCII 空格
// 他们分别对应于 L, M, N, P, S 类别和 ASCII 空格
// “可打印字符”和“图形字符”基本是相同的,不同之处在于
// “可打印字符”只包含 Zs 类别中的 ASCII 空格(U+0020)
func IsPrint(r rune) bool // IsPunct 判断 r 是否为一个标点字符 (类别 P)
func IsPunct(r rune) bool // IsSymbol 判断 r 是否为一个符号字符
func IsSymbol(r rune) bool // IsMark 判断 r 是否为一个 mark 字符 (类别 M)
func IsMark(r rune) bool // IsOneOf 判断 r 是否在 set 范围内
func IsOneOf(set []*RangeTable, r rune) bool ------------------------------ // 示例
func main() {
fmt.Println() // 数字
for _, r := range "Hello 123123一二三!" {
if unicode.IsDigit(r) {
fmt.Printf("%c", r)
}
} // 123123 fmt.Println() // 数字
for _, r := range "Hello 123123一二三!" {
if unicode.IsNumber(r) {
fmt.Printf("%c", r)
}
} // 123123 fmt.Println() // 字母
for _, r := range "Hello\n\t世界!" {
if unicode.IsLetter(r) {
fmt.Printf("%c", r)
}
} // Hello世界 fmt.Println() // 空白
for _, r := range "Hello \t世 界!\n" {
if unicode.IsSpace(r) {
fmt.Printf("%q", r)
}
} // ' ''\t''\u3000''\n' fmt.Println() // 控制字符
for _, r := range "Hello\n\t世界!" {
if unicode.IsControl(r) {
fmt.Printf("%#q", r)
}
} // '\n''\t' fmt.Println() // 可打印
for _, r := range "Hello 世界!\t" {
if unicode.IsPrint(r) {
fmt.Printf("%c", r)
}
} // Hello世界! fmt.Println() // 图形
for _, r := range "Hello 世界!\t" {
if unicode.IsGraphic(r) {
fmt.Printf("%c", r)
}
} // Hello 世界! fmt.Println() // 掩码
for _, r := range "Hello ៉៊់៌៍!" {
if unicode.IsMark(r) {
fmt.Printf("%c", r)
}
} // ៉៊់៌៍ fmt.Println() // 标点
for _, r := range "Hello 世界!" {
if unicode.IsPunct(r) {
fmt.Printf("%c", r)
}
} // ! fmt.Println() // 符号
for _, r := range "Hello (<世=界>)" {
if unicode.IsSymbol(r) {
fmt.Printf("%c", r)
}
} // <=>
} ------------------------------ // 示例:判断汉字和标点
func main() {
// 将 set 设置为“汉字、标点符号”
set := []*unicode.RangeTable{unicode.Han, unicode.P}
for _, r := range "Hello 世界!" {
if unicode.IsOneOf(set, r) {
fmt.Printf("%c", r)
}
} // 世界!
} ------------------------------ // 示例:输出所有 mark 字符
func main() {
for _, cr := range unicode.M.R16 {
Lo, Hi, Stride := rune(cr.Lo), rune(cr.Hi), rune(cr.Stride)
for i := Lo; i >= Lo && i <= Hi; i += Stride {
if unicode.IsMark(i) {
fmt.Printf("%c", i)
}
}
}
} ------------------------------------------------------------

Golang学习 - unicode 包的更多相关文章

  1. Golang学习 - unicode/utf16 包

    ------------------------------------------------------------ // IsSurrogate 判断 r 是否为代理区字符 // 两个代理区字符 ...

  2. Golang学习 - unicode/utf8 包

    ------------------------------------------------------------ // 编码所需的基本数字 const ( RuneError = '\uFFF ...

  3. Golang学习 - sort 包

    ------------------------------------------------------------ // 满足 Interface 接口的类型可以被本包的函数进行排序. type ...

  4. Golang学习 - reflect 包

    ------------------------------------------------------------ 在 reflect 包中,主要通过两个函数 TypeOf() 和 ValueO ...

  5. Golang学习 - bytes 包

    ------------------------------------------------------------ 对于传入 []byte 的函数,都不会修改传入的参数,返回值要么是参数的副本, ...

  6. Golang学习 - bufio 包

    ------------------------------------------------------------ // bufio 包实现了带缓存的 I/O 操作 -------------- ...

  7. Golang学习 - io 包

    ------------------------------------------------------------ 先说一下接口,Go 语言中的接口很简单,在 Go 语言的 io 包中有这样一个 ...

  8. Golang学习 - strings 包

    ------------------------------------------------------------ strings 包与 bytes 包中的函数用法基本一样,不再赘述. 只对 R ...

  9. Golang学习 - unsafe 包

    ------------------------------------------------------------ 指针类型: *类型:普通指针,用于传递对象地址,不能进行指针运算. unsaf ...

随机推荐

  1. centos php php-fpm install

    好记性不如烂笔头,把自己安装的步骤记录下来 1.下载php-5.2.8以及php-5.2.8-fpm-0.5.10.diff.gz,放到/usr/local/src目录 2.解压php-5.2.8到/ ...

  2. POJ1338Ugly Numbers(DP)

    http://poj.org/problem?id=1338 第一反应就是DP,DP[i] = min{2*DP[j], 3*DP[k], 5*DP[p] j,k,p<i};于是枚举一下0-i- ...

  3. MFC中消息响应机制

    由于视类窗口始终覆盖在框架类窗口之上,因此所有操作,包括鼠标单击.鼠标移动等操作都只能由视类窗口捕获.一个MFC消息响应函数在程序中有三处相关信息:函数原型.函数实现和以及用来关联消息和消息响应函数的 ...

  4. 创建类模式(五):单例(Singleton)

    定义 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式一般情况下通过使用private的构造函数确保了在一个应用中只产生一个实例,并且是自行实例化. 和静态变量的区别 虽然 ...

  5. setTimeout setInterval 区别 javascript线程解释

    原文:http://www.iamued.com/qianduan/1645.html 今天看到这篇文章,学到了不少东西 特此发出来 和大家分享 JavaScript的setTimeout与setIn ...

  6. c语言-格式控制字符 %XXd 用法

    d格式字符 用来输出十进制整数,有以下几种用法: 1. %d, 按整型数据的实际长度输出. 2.  %md,m为指定输出的整型位数的宽度,如果整型数据的实际位数小于m,则左端补以空格,如果大于m,则按 ...

  7. 25.怎样创建一个Swift项目?

    经历前面三部分的学习之后,我们对于Swift的有了基本的了解,知道它的基础语法,也知道了类.结构体.枚举.协议.扩展等等内容.但知道上面这些内容,并不代表我们就能很好的进行实际的项目开发了,本部分内容 ...

  8. BOM(制造数据管理)

    --工艺路线 DECLARE -- API input variables l_operation_tbl bom_rtg_pub.operation_tbl_type := bom_rtg_pub. ...

  9. state与status的区别

    status 指人时暗指相对的地位,指物时相当于 situation.situation 较狭义地指由环境综合决定的特定时间上的状态或情形. state 人或物存在或所处的状态,和 condition ...

  10. Scrum Planning Card

    最近用Swift写了个小工具Scrum Planning Card,如果你也用scrum管理项目, 或许用这个工具可以提高你的工作效率. 另外欢迎提建议和反馈,谢谢. 欢迎关注我的微信公众号 Hope ...