5.3.3 拆分与连接字符串

 
str = substr (s, offset)
substr (s, offset, len)

返回字符串 s 中从字符序号 offset 开始、长度为 len 的子字符串。

位置编号从 1 开始。若 offset 为负,则从字符串末尾向前相应位置开始提取。

若省略 len,则子字符串延伸到 s 的末尾。len 为负值时,提取到距字符串末尾 len 个字符处为止。

示例:

substr ("This is a test string", 6, 9)
     ⇒  "is a test"
substr ("This is a test string", -11)
     ⇒  "test string"
substr ("This is a test string", -11, -7)
     ⇒  "test"

此函数模仿了 Perl 中的同名函数。

 
[tok, rem] = strtok (str)
[tok, rem] = strtok (str, delim)

查找字符串 str 中从开头到第一个属于分隔符字符串 delim 的字符之前(不含该字符)的所有字符。

str 也可以是字符串元胞数组,此时函数会对每个字符串分别执行,并返回令牌和剩余部分的元胞数组。

前导分隔符会被忽略。若未指定 delim,则默认以空白字符为分隔符。

若请求了 rem,则它包含字符串的剩余部分,从第一个分隔符开始。

示例:

strtok ("this is the life")
     ⇒  "this"

[tok, rem] = strtok ("14*27+31", "+-*/")
      ⇒ 
        tok = 14
        rem = *27+31

另请参阅: indexstrsplitstrchrisspace

 
[cstr] = strsplit (str)
[cstr] = strsplit (str, del)
[cstr] = strsplit (…, name, value)
[cstr, matches] = strsplit (…)

使用 del 指定的分隔符拆分字符串 str,并返回子字符串的元胞数组。

若未指定分隔符,则在空白字符 {" ", "\f", "\n", "\r", "\t", "\v"} 处拆分字符串。否则,分隔符 del 必须是一个字符串或字符串元胞数组。默认情况下,输入字符串 s 中的连续分隔符会被合并为一个,从而只产生一次拆分。

支持的 名称/ 键值对参数有:

  • collapsedelimiters(折叠分隔符),可取值为 true(默认值)或 false
  • delimitertype(分隔符类型),可取值为 "simple"(默认值)或 "regularexpression"。简单分隔符按字面精确匹配文本;否则使用 regexp 中所述的正则表达式语法。

可选的第二个输出 matches 返回原始字符串中实际匹配到的分隔符。

使用简单分隔符的示例:

strsplit ("a b c")
      ⇒ 
          {
            [1,1] = a
            [1,2] = b
            [1,3] = c
          }

strsplit ("a,b,c", ",")
      ⇒ 
          {
            [1,1] = a
            [1,2] = b
            [1,3] = c
          }

strsplit ("a foo b,bar c", {" ", ",", "foo", "bar"})
      ⇒ 
          {
            [1,1] = a
            [1,2] = b
            [1,3] = c
          }

strsplit ("a,,b, c", {",", " "}, "collapsedelimiters", false)
      ⇒ 
          {
            [1,1] = a
            [1,2] =
            [1,3] = b
            [1,4] =
            [1,5] = c
          }

使用正则表达式分隔符的示例:

strsplit ("a foo b,bar c", ',|\s|foo|bar', ...
          "delimitertype", "regularexpression")
⇒ 
{
            [1,1] = a
            [1,2] = b
            [1,3] = c
}

strsplit ("a,,b, c", '[, ]', "collapsedelimiters", false, ...
          "delimitertype", "regularexpression")
⇒ 
{
            [1,1] = a
            [1,2] =
            [1,3] = b
            [1,4] =
            [1,5] = c
}

strsplit ("a,\t,b, c", {',', '\s'}, "delimitertype", "regularexpression")
⇒ 
{
            [1,1] = a
            [1,2] = b
            [1,3] = c
}

strsplit ("a,\t,b, c", {',', ' ', '\t'}, "collapsedelimiters", false)
⇒ 
{
            [1,1] = a
            [1,2] =
            [1,3] =
            [1,4] = b
            [1,5] =
            [1,6] = c
}

另请参阅: ostrsplitstrjoinstrtokregexp

 
[cstr] = ostrsplit (s, sep)
[cstr] = ostrsplit (s, sep, strip_empty)

使用一个或多个分隔符 sep 拆分字符串 s,并返回字符串元胞数组。

连续的分隔符以及边界处的分隔符会产生空字符串,除非 strip_empty 为真。strip_empty 的默认值为假(false)。

二维字符数组会在分隔符处以及原始列边界处进行拆分。

示例:

ostrsplit ("a,b,c", ",")
      ⇒ 
          {
            [1,1] = a
            [1,2] = b
            [1,3] = c
          }

ostrsplit (["a,b" ; "cde"], ",")
      ⇒ 
          {
            [1,1] = a
            [1,2] = b
            [1,3] = cde
          }

另请参阅: strsplitstrtok

 
str = strjoin (cstr)
str = strjoin (cstr, delimiter)

将元胞字符串数组 cstr 的元素连接成单个字符串。

若未指定 delimitercstr 的元素之间用空格分隔。

delimiter 指定为字符串,则使用该字符串连接元胞字符串数组。支持转义序列。

delimiter 是一个字符串元胞数组,且其长度比 cstr 少 1,则通过交错插入 delimiter 的元胞字符串元素来连接 cstr 的元素。此时不支持转义序列。

strjoin ({'Octave','Scilab','Lush','Yorick'}, '*')
      ⇒  'Octave*Scilab*Lush*Yorick'

另请参阅: strsplit


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2