Nim 中字符串使用 UTF-8 编码。

字符串变量的默认值是 "",即长度为 0 的字符串,空字符串:

  1. var s: string
  2. echo s.len # 输出 0

字符串字面量

经典字符串

Nim 中字符串字面量是用双引号括起来的,字符串中可以带有以\开头的常见转义字符。比如:

  1. var simpleStr = "Hello \t\"YCY\""
  2. echo simpleStr
  3. # 输出如下:
  4. # Hello "YCY"

常见转义字符有:

  • \t - tab
  • \n - 换行
  • \a - 响铃
  • \\ - 斜线
  • \" - 双引号

原生字符串

Nim 支持原生字符串(raw string)。和经典字符串相比,原生字符串

  1. r"开头,以"结尾
  2. 忽略转义字符,比如 \t 不被当成转义字符,而被当成 \t 两个字符

比如:

  1. var rawStr = r"Hello \t"
  2. echo rawStr
  3. # 输出如下:
  4. # Hello \t

原生字符串有一个操蛋的地方,没法表示双引号。

长字符串

Nim 支持长字符串。长字符串以"""开头和结尾。对于原生字符串,

  1. 可以在字符串内随意换行
  2. 和原生字符串一样,忽略转义字符

比如:

  1. var longStr = """Hello \t"YCY"
  2. -- Rocket Girls"""
  3. echo longStr
  4. # 输出如下:
  5. # Hello \t"YCY"
  6. # -- Rocket Girls

字符串长度

Nim 字符串有一个长度。可以通过 len 字段来获取长度,也可以通过 len 函数来获取。比如:

  1. var str: string= "CHINA"
  2. echo len(str) # 输出 5
  3. echo str.len # 输出 5

需要指出,Nim 字符串和在存储上 C 语言一样,是一个以 0 结尾的字符数组,并且结尾处的 0 不计入字符串长度。

可变字符串

值得注意的是,Nim 字符串本身是可变的mutable),这点和 Java 等语言不同。比如:

  1. var str: string= "CHINA"
  2. echo str # 输出 CHINA
  3. echo str.len # 输出 5
  4. str.add("!") # 在 str 后面 追加一个叹号
  5. echo str # 输出 CHINA!
  6. echo str.len # 输出 6

注意,上例中 str 变量本身发生了变化。

字符串连接符

连接多个字符串可以使用操作符 &,此操作符会返回一个新的字符。比如:

  1. var str = "CHINA!"
  2. var anotherStr = str & "!" & "!" & "!"
  3. echo anotherStr # 输出 CHINA!!!!
  4. echo anotherStr == str # 输出 false

比较

把一个字符串变量通过 = 赋值给另一个变量,实际上是做了一次赋值。两个字符串在进行比较时,是直接按字母表顺序比较两个字符串里的内容。

第 i 个字符

注意,索引操作 s[i] 返回的是第 i 个 char,而不是第 i 个 unichar。比如:

  1. var ustr = "川宝" # 以下 4 个 echo 打印的东西亲娘都不认识
  2. echo ustr[0]
  3. echo ustr[1]
  4. echo ustr[2]
  5. echo ustr[3]