5 回答
请参阅此示例以了解标题大小写/大写的区别:
package main
import (
"fmt"
"strings"
)
func main() {
str := "dz"
fmt.Println(strings.ToTitle(str))
fmt.Println(strings.ToUpper(str))
}
(注意这里的“dz”是单个字符,而不是“d”后跟“z”:dz vs dz)
我有同样的问题。你想使用strings.Title()
方法而不是strings.ToTitle()
方法。
对于真正的标题大小写转换功能,您必须使用 -
strings.Title(strings.ToLower(str))
我尝试了将字符串转换为标题大小写的答案,如果一个单词已经包含所有大写字符或文本中只有很少的大写字母和很少的小写字母,则以下方法均无效。
这是关于做什么的全面检查 - http://ideone.com/r7nVbZ
我将结果粘贴在这里 -
Given Text: title case
ToTitle: TITLE CASE
ToUpper: TITLE CASE
Title: Title Case
ToLower then Title: Title Case
-------------------------------
Given Text: Title Case
ToTitle: TITLE CASE
ToUpper: TITLE CASE
Title: Title Case
ToLower then Title: Title Case
-------------------------------
Given Text: TITLE CASE
ToTitle: TITLE CASE
ToUpper: TITLE CASE
Title: TITLE CASE
ToLower then Title: Title Case
-------------------------------
Given Text: TiTlE CasE
ToTitle: TITLE CASE
ToUpper: TITLE CASE
Title: TiTlE CasE
ToLower then Title: Title Case
-------------------------------
Given Text: Title case
ToTitle: TITLE CASE
ToUpper: TITLE CASE
Title: Title Case
ToLower then Title: Title Case
-------------------------------
Given Text: title CASE
ToTitle: TITLE CASE
ToUpper: TITLE CASE
Title: Title CASE
ToLower then Title: Title Case
根据 unicode.org
“由于包含某些复合字符以实现兼容性,例如 U+01F1 拉丁大写字母 dz,因此在单词的第一个字符必须大写的情况下使用第三种情况,称为 titlecase。此类字符的示例是 U +01F2 拉丁文大写字母 d 和小写字母 z。三种大小写形式是 UPPERCASE、Titlecase 和小写。
这意味着当您使用ToTitle
or之ToUpper
类的字符时dz
,您可能无法从视觉上区分结果,但是这两种方法将返回不同的 unicode 代码点。
dz = "\u01f3"
ToUpper(dz) = "\u01f1"
ToTittle(dz) = "\u01f2"
即使您在评论中说“源代码是相同的”。实际上并非如此(参见 L255 与 L277)。因此,这两个函数执行不同的任务,完全按照文档说明。有关“大写”和“大写”的定义,请参阅unicode.org上的文档。