19

ToUpperToTitle函数之间有什么区别吗?

4

5 回答 5

13

请参阅此示例以了解标题大小写/大写的区别:

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)

http://play.golang.org/p/xpDPLqKM9C

于 2013-09-01T17:58:57.400 回答
12

我有同样的问题。你想使用strings.Title()方法而不是strings.ToTitle()方法。

http://golang.org/pkg/strings/#Title

于 2013-11-15T10:15:26.320 回答
6

对于真正的标题大小写转换功能,您必须使用 -

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
于 2016-11-18T11:52:34.397 回答
3

根据 unicode.org

“由于包含某些复合字符以实现兼容性,例如 U+01F1 拉丁大写字母 dz,因此在单词的第一个字符必须大写的情况下使用第三种情况,称为 titlecase。此类字符的示例是 U +01F2 拉丁文大写字母 d 和小写字母 z。三种大小写形式是 UPPERCASE、Titlecase 和小写。

这意味着当您使用ToTitleor之ToUpper类的字符时dz,您可能无法从视觉上区分结果,但是这两种方法将返回不同的 unicode 代码点。

dz           = "\u01f3"
ToUpper(dz)  = "\u01f1"
ToTittle(dz) = "\u01f2"

https://play.golang.org/p/OAjONd87y2

于 2016-10-27T04:27:22.887 回答
2

即使您在评论中说“源代码是相同的”。实际上并非如此(参见 L255 与 L277)。因此,这两个函数执行不同的任务,完全按照文档说明。有关“大写”和“大写”的定义,请参阅unicode.org上的文档。

于 2013-09-01T15:46:16.100 回答