亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我可以刪除字符串表示([]byte)中的尾隨零來比較字符串嗎?

我可以刪除字符串表示([]byte)中的尾隨零來比較字符串嗎?

Go
慕碼人2483693 2022-06-21 16:37:56
我需要比較 Go 中的字符串。問題是:我想將帶重音的單詞 (cafe) 與其非重音形式 (cafe) 進行比較。我要做的第一件事就是將我的重音轉換string為非重音形式:你可以在這里運行代碼:https: //play.golang.org/p/-eRUQeujZET但是每次我在一個字符串中進行這種轉換時,它最終都會添加更多的符文。上面的示例打印:bytes: [99 97 102 101 0] string: cafe由于我需要將此進程返回的字符串與首先不帶“é”的對應字符串進行比較,因此我需要rune從[]byte.在運行了一些測試之后,我發現最后一個 0(有時它添加了多個)不會改變字符串表示。我錯過了什么嗎?我可以只刪除末尾的所有零[]byte嗎?這是我刪除 0 并比較字符串的代碼:https://play.golang.org/p/HoueAGI4uUx由于我們不能在這個領域單獨工作,因此我閱讀了以下文章以了解我現在所處的位置:https://blog.golang.org/stringshttps://blog.golang.org/normalizationhttps://unicode.org/reports/tr15/https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/
查看完整描述

1 回答

?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

這是您的自定義Transform()函數:


func Transform(s string) ([]byte, error) {

    var t transform.Transformer

    t = transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC)

    dst := make([]byte, len(s))

    _, _, err := t.Transform(dst, []byte(s), true)

    if err != nil {

        return nil, err

    }

    return dst, nil

}

在其中,您正在使用Transformer.Transform()它還返回寫入目標的字節數。但是您不使用該返回值。


最簡單的方法是存儲nDst返回值,并對目標切片進行切片,因為它保存了其中“有用”字節的數量(超出的字節nDst將保留0為前面make()調用所傳遞給您的):


nDst, _, err := t.Transform(dst, []byte(s), true)

if err != nil {

    return nil, err

}

return dst[:nDst], nil

通過此更改,返回的切片將僅包含有用的字節而沒有尾隨零。


輸出將是(在Go Playground上嘗試):


2009/11/10 23:00:00 bytes: [99 97 102 101] string: cafe


查看完整回答
反對 回復 2022-06-21
  • 1 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號