国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

go字符串詳解

這篇具有很好參考價值的文章主要介紹了go字符串詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


摘要

go字符串結(jié)構(gòu)體包含:指向底層存儲數(shù)組的指針、字符串長度。字符串按utf-8將字符編碼成二進(jìn)制數(shù),然后存儲在byte數(shù)組中。因?yàn)閡tf-8編碼一個字符可能占用多個字節(jié),例如一個漢字占3個字節(jié),所以字符串中的一個字符可能對應(yīng)byte數(shù)組中的多個元素。為了讓一個字符對應(yīng)數(shù)組的一個元素以便于處理,go設(shè)計(jì)了rune類型,其底層是int32,四個字節(jié),正好能存儲最大四個字節(jié)utf-8編碼數(shù)據(jù)。

1、byte和rune類型

  • byte等價于uint8類型的數(shù)據(jù),一個字節(jié)大小,是字符串底層存儲數(shù)據(jù)的結(jié)構(gòu)。
  • rune等價于int32類型的數(shù)據(jù),四個字節(jié)大小,為了處理utf-8字符串而設(shè)計(jì)的。因?yàn)間o語言字符串默認(rèn)是按照utf-8編碼的方式存儲數(shù)據(jù)的,其中最大的字符占用4個字節(jié)的數(shù)據(jù),所以需要rune才能一個字符對應(yīng)一個數(shù)據(jù)元素。

2、字符串(string)

在go中字符串具有如下特征:

  • go字符串存儲在只讀內(nèi)存段中,不能被修改,但可以被切片和復(fù)制。
  • 字符串結(jié)構(gòu)由一個指向底層數(shù)組的指針和字符串長度組成。因?yàn)榻o出了具體長度,所以不需要以’\0’的方式判斷字符串結(jié)尾。
  • 底層使用字節(jié)(byte)數(shù)組存儲字符串中各字符對應(yīng)的數(shù)字編碼。一個字符可能占用好幾個byte。

需要注意的是在utf-8編碼中,一個漢字占用3個字節(jié),而byte是uint8類型,一個byte元素一個字節(jié),需要三個byte才能存儲一個漢字。所以:

func main() {
   s := "哈嘍世界"
   fmt.Println(len(s)) // 輸出:12
}

而rune是int32類型,四個字節(jié),和utf-8最大字節(jié)數(shù)(4個字節(jié))一致,所以可以將string類型轉(zhuǎn)換為rune,去查看其具體存儲的字符數(shù)。如下:

func main() {
   s := "哈嘍世界"
   fmt.Println(len([]rune(s))) // 輸出:4
}

需要注意的是:go中rune類型就是為了處理utf-8字符串而設(shè)計(jì)的,而定長4字節(jié)的方式存儲utf-8中只占1、2、3個字節(jié)的字符,存在一定的空間浪費(fèi)。所以string默認(rèn)是按照byte類型的存儲的,更加節(jié)省空間,當(dāng)需要的時候,再轉(zhuǎn)換為rune處理。

3、練習(xí)-反轉(zhuǎn)字符串

如果反轉(zhuǎn)函數(shù)如下:

func reverse(s string) string {
   bs := []byte(s)
   sLen := len(bs)
   for i := 0; i < sLen/2; i++ {
      bs[i], bs[sLen-i-1] = bs[sLen-i-1], bs[i]
   }
   return string(bs)
}

那么傳入屬于1字節(jié)編碼的ASCILL字符,能夠被反轉(zhuǎn):

func main() {
   s := "abcdefg"
   fmt.Println(reverse(s)) // 輸出gfedcba
}

但是若傳入需要占用多個字節(jié)的字符,就會輸出亂碼:

s := "哈嘍世界"
fmt.Println(reverse(s)) // 輸出??疸佖刓?

所以如果想要使得所有輸入字符都能被正確的反轉(zhuǎn),應(yīng)該使用rune代替byte:文章來源地址http://www.zghlxwxcb.cn/news/detail-493945.html

func reverse(s string) string {
   bs := []rune(s)
   sLen := len(bs)
   for i := 0; i < sLen/2; i++ {
      bs[i], bs[sLen-i-1] = bs[sLen-i-1], bs[i]
   }
   return string(bs)
}

func main() {
   s := "哈嘍世界"
   fmt.Println(reverse(s)) // 輸出:界世嘍哈
}

到了這里,關(guān)于go字符串詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python中判斷字符串是否包含另一個字符串

    Python中判斷字符串是否包含另一個字符串 在Python編程中,經(jīng)常需要判斷一個字符串是否包含另一個字符串。這在處理文本數(shù)據(jù)或搜索操作時非常常見。Python提供了幾種方法來實(shí)現(xiàn)這個功能,本文將介紹其中的幾種方法,并提供相應(yīng)的源代碼示例。 方法一:使用in 最簡

    2024年02月07日
    瀏覽(35)
  • golang中如何判斷字符串是否包含另一字符串

    golang中如何判斷字符串是否包含另一字符串 在Go語言中,可以使用strings.Contains()函數(shù)來判斷一個字符串是否包含另一個字符串。該函數(shù)接受兩個參數(shù):要搜索的字符串和要查找的子字符串,如果子字符串存在于要搜索的字符串中,則返回true,否則返回false。 下面是一個示例代

    2024年02月09日
    瀏覽(91)
  • Java判斷一個字符串是否包含某個字符

    Java判斷一個字符串是否包含某個字符

    1 問題 如何利用Java通過不同的方法來判斷一個字符串是否包含某個字符。 2 方法 .contains方法 這個是利用java.lang.String.contains()?方法返回true,當(dāng)且僅當(dāng)此字符串包含指定的char值序列,此方法返回true,如果此字符串包含,否則返回false。 (2).indexOf方法 這一個是利用java.lang.Str

    2024年02月16日
    瀏覽(112)
  • 華為OD機(jī)試真題 Java 實(shí)現(xiàn)【字符串摘要】【2023 B卷 100分】,附詳細(xì)解題思路
  • Oracle-如何判斷字符串包含中文字符串(漢字),刪除中文內(nèi)容及保留中文內(nèi)容

    Oracle-如何判斷字符串包含中文字符串(漢字),刪除中文內(nèi)容及保留中文內(nèi)容

    今天遇見一個問題需要將字段中包含中文字符串的篩選出來 在網(wǎng)上查找了一下有以下三種方式: length計(jì)算字符長度,lengthb計(jì)算字節(jié)長度 篩選出包含中文的字符串 ASCIISTR函數(shù),參數(shù)是一個字符串,如果這個字符在ASCII碼表中有,則轉(zhuǎn)成ASCII表中的字符。如果沒有,則轉(zhuǎn)成xxx

    2024年02月12日
    瀏覽(27)
  • ChatGPT:字符串操作問題——提取包含括號的字符串中的題干內(nèi)容

    String title = p.text().split(“(”)[0];為什么會報(bào)錯 ChatGPT: 在這段代碼中,您正在使用Java處理一個字符串(假設(shè)是HTML或文本),嘗試將其分割成兩部分,其中一個是從左括號\\\"(\\\"之前的內(nèi)容。這段代碼的目的是提取標(biāo)題,但可能會出現(xiàn)一些錯誤,具體取決于輸入字符串和代碼的上

    2024年02月07日
    瀏覽(55)
  • Linux :: 內(nèi)容過濾指令【3】:grep 指令【詳解】:在指定文件中過濾搜索信息、(模糊)查找包含指定字符串的內(nèi)容?。ㄈ纾合到y(tǒng)故障時,查看操作日志信息等情景)

    前言:本篇是 Linux 基本操作篇章的內(nèi)容! 筆者使用的環(huán)境是基于騰訊云服務(wù)器:CentOS 7.6 64bit。 學(xué)習(xí)集: C++ 入門到入土?。?!學(xué)習(xí)合集 Linux 從命令到網(wǎng)絡(luò)再到內(nèi)核!學(xué)習(xí)合集 注:find 指令常與 grep 指令在面試中被提及,需讓你回答異同! 目錄索引: 1. 基本語法、功能及使

    2024年02月09日
    瀏覽(31)
  • c# 判斷一個字符串列表是否包含另一個字符串列表中某一個元素

    當(dāng)需要判斷一個字符串列表是否包含另一個字符串列表中的某個元素時,可以使用 LINQ 查詢來完成。下面是一個示例方法: 在上面的示例中,我們有兩個字符串列表 list1 和 list2。我們想要判斷 list1 是否包含了 list2 中的某個元素。 我們定義了 ListContainsElement 方法,該方法接

    2024年02月12日
    瀏覽(108)
  • 【Java】日期/事件字符串包含TZ

    這個時間是什么格式? 2021-09-02T15:25:03Z jdk1.8 2021-09-02T15:25:03Z 中T是表示時間段開始的,Z是表示UTC時間(通用協(xié)調(diào)時, Universal Time Coordinated)。 UTC與格林尼治平均時(GMT, Greenwich Mean Time)一樣,都與英國倫敦的本地時間相同。 包含T、Z的日期的出自 ISO 8601 Extended Format 。 I

    2023年04月11日
    瀏覽(20)
  • Python中判斷字符串包含的方法

    在Python編程語言中,我們經(jīng)常需要判斷一個字符串是否包含另一個字符串。幸運(yùn)的是,Python提供了多種方法來完成這個任務(wù)。下面我們將介紹幾種常用的方法。 方法一:使用in Python中的in可以用來判斷一個字符串是否包含另一個字符串。具體用法如下:

    2024年02月05日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包