3 回答

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個贊
戈朗語中的 Unicode 字符(如中文字符)需要 3 個字節(jié),而 ASCII 只需要 1 個字節(jié)。這是設(shè)計(jì)使然。
如果要檢查 unicode 字符的實(shí)際字符串大小,請使用 unicode/utf8 內(nèi)置包。
fmt.Printf("String: %s\nLength: %d\nRune Length: %d\n", c, len(c), utf8.RuneCountInString(c))
// String: 這是一個測試
// Length: 18
// Rune Length: 6
更基本的計(jì)數(shù)方法是使用 for 循環(huán)。
count := 0
for range "這是一個測試" {
count++
}
fmt.Printf("Count=%d\n", count)
// Count=6
關(guān)于表格格式的中英文字符串的漂亮印刷,似乎沒有直接的方法。在這種情況下,制表符也不起作用。一個小的黑客解決這個問題是使用csv編寫器,如下所示:
data := [][]string{
{"這是一個測試", "|"},
{"aaaaaaaaaa", "|"},
{"つのだ☆HIRO", "|"},
{"aaaaaaaaaa", "|"},
}
w := csv.NewWriter(os.Stdout)
defer w.Flush()
w.Comma = '\t'
for _, row := range data {
w.Write(row)
}
這應(yīng)該按預(yù)期打印數(shù)據(jù)。不幸的是,堆棧溢出打印的格式與我在終端中看到的格式不同。但游樂場拯救了我們。點(diǎn)擊這里
Note:這適用于符文大小彼此足夠接近的字符串。對于更長的字符串,您需要更多的解決方法。

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個贊
我認(rèn)為這是你想要的
func TestChinese(t *testing.T) {
tests := []string{
"這是一個測試",
"aaaaaaaaa",
"つのだ☆HIRO",
"aaaaaaaaaa",
"這是aaaaa一個測試",
"這是一個つの測試",
}
for _, tt := range tests {
fmt.Printf("%s\t%d\t%d\n", tt, len([]rune(tt)), len([]byte(tt)))
}
}
輸出:
這是一個測試 6 18
aaaaaaaaa 9 9
つのだ☆HIRO 8 16
aaaaaaaaaa 10 10
這是aaaaa一個測試 11 23
這是一個つの測試 8 24

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個贊
您的問題(如mkopriva在評論中指出的那樣)是一個顯示問題,不適合通過任何類型的計(jì)數(shù)技巧來解決。
當(dāng)我們用英語顯示可變音高或比例文本與等寬文本時,我們遇到了同樣的問題。也就是說,比較:
mmmm, tasty iiii, tasty?
跟:
嗯,好吃
,好吃嗎?
(假設(shè)您使用瀏覽器閱讀此答案!我們不必打印漢字,甚至不必留下簡單的ASCII來解決問題!
您需要的是用于中文文本的等寬顯示字體,或者可能是一些以表格形式排版的軟件,以及您如何獲得...完全是另一個問題。
- 3 回答
- 0 關(guān)注
- 120 瀏覽
添加回答
舉報(bào)