目录

语法

说明

示例

在空白处拆分字符串并重新联接

在分隔符处拆分字符串并用新的分隔符联接

使用模式作为分隔符拆分字符串

在多个分隔符处拆分字符串

沿指定维度定向字符串

拆分字符串并返回分隔符


        split函数的功能是在分隔符处拆分字符串。

语法

newStr = split(str)
newStr = split(str,delimiter)
newStr = split(str,delimiter,dim)
[newStr,match] = split(___)

说明

        newStr ​ = split(str) 在空白字符处拆分 str 并以输出数组 newStr 的形式返回结果。输入数组 str 可以是字符串数组、字符向量或字符向量元胞数组。如果 str 是一个字符串数组,则 newStr 也是一个字符串数组。否则,newStr 为字符向量元胞数组。newStr 不包括 str 中的空白字符。

        如果 str 是字符串数组或字符向量元胞数组,并且有多个元素,则每个元素必须可分成相同数量的子字符串。

  • 如果 str 是一个字符串标量或字符向量,则 newStr 是一个 N×1 字符串数组或字符向量元胞数组,其中 N 是子字符串的数量。

  • 如果 str 是一个 M×1 字符串数组或元胞数组,则 newStr 是一个 M×N 数组。

  • 如果 str 是一个 1×M 字符串数组或元胞数组,则 newStr 是一个 1×M×N 数组。

        对于任意大小的字符串数组或元胞数组,split 沿大小为 1 的第一个尾部维度确定 N 个子字符串的方向。

        如果 str 的每个元素的子字符串数量不相同,则在 for 循环中调用 split,一次拆分 str 的一个元素。

        newStr  = split(str,delimiter) 在 delimiter 指定的分隔符处拆分 str 的每个元素。输出 newStr 不包括分隔符。

        newStr = split(str,delimiter,dim) 将 str 的每个元素拆分为一个向量,该向量的方向为 dim 指定的维度方向。

        [newStr,match] = split(___) 还返回一个数组 match,它包含作为 split 函数拆分 str 的位置而出现的所有分隔符。您可以将此语法与前面语法中的任何输入参数结合使用。

示例

在空白处拆分字符串并重新联接

        在空白字符处拆分字符串数组中的姓名。然后重新排序并联接这些字符串,使姓在名的前面。创建一个包含姓名的 3×1 字符串数组。从 R2017a 开始,可以使用双引号创建字符串。

names = ["Mary Butler";
         "Santiago Marquez";
         "Diana Lee"]


names = 3x1 string
    "Mary Butler"
    "Santiago Marquez"
    "Diana Lee"

        如果使用的是 R2016b,请使用 string 函数而不是双引号来创建字符串数组。在空白字符处拆分 names,使其成为一个 3×2 字符串数组。

names = split(names)


names = 3x2 string
    "Mary"        "Butler" 
    "Santiago"    "Marquez"
    "Diana"       "Lee"    

        将 names 的列交换位置,使姓在第一列。在每个姓后面添加一个逗号。

names = [names(:,2) names(:,1)];
names(:,1) = names(:,1) + ','


names = 3x2 string
    "Butler,"     "Mary"    
    "Marquez,"    "Santiago"
    "Lee,"        "Diana"   

        将姓和名联接起来。join 函数在它联接的字符串之间放置一个空格字符。联接之后,names 是一个 3×1 字符串数组。

names = join(names)


names = 3x1 string
    "Butler, Mary"
    "Marquez, Santiago"
    "Lee, Diana"

在分隔符处拆分字符串并用新的分隔符联接

        创建一个包含文件夹路径的字符串。从 R2017a 开始,可以使用双引号创建字符串。

myPath = "/Users/jdoe/My Documents/Examples"


myPath = 
"/Users/jdoe/My Documents/Examples"

        在 / 字符处拆分路径。split 将以 5×1 字符串数组的形式返回 myFolders。第一个字符串为 "",因为 myPath 以 / 字符开头。

myFolders = split(myPath,"/")


myFolders = 5x1 string
    ""
    "Users"
    "jdoe"
    "My Documents"
    "Examples"

        使用 \ 作为分隔符,将 myFolders 联接成一个新路径。添加 C: 作为路径的开头。

myNewPath = join(myFolders,"\");
myNewPath = 'C:' + myNewPath


myNewPath = 
"C:\Users\jdoe\My Documents\Examples"

使用模式作为分隔符拆分字符串

自 R2020b 开始提供

通过将文本视为分隔符从字符串中获取数字。使用模式匹配文本。然后将数字相加。

首先,创建一个包含数字的字符串。

str = "10 apples 3 bananas and 5 oranges"

str = 
"10 apples 3 bananas and 5 oranges"

        然后,创建一个匹配空白字符或字母的模式。

pat = " " | lettersPattern

pat = pattern
  Matching:

    " " | lettersPattern

        使用 pat 作为分隔符拆分字符串。空字符串表示空白和其间没有任何内容的字母序列之间的拆分。例如,在 "10 apples" 中,分隔符 " " 之前有一个拆分,然后在 " " 和 "apples" 之间有一个拆分。由于分隔符 " " 和 "apples" 之间没有任何内容,split 函数返回空字符串来指示它们之间没有任何内容。

N = split(str,pat)

N = 11x1 string
    "10"
    ""
    ""
    "3"
    ""
    ""
    ""
    ""
    "5"
    ""
    ""

        丢弃空字符串,并保留表示数字的子字符串。

N = N(strlength(N) > 0)

N = 3x1 string
    "10"
    "3"
    "5"

        最后,将 N 转换为数值数组,并对其求和。

N = str2double(N);
sum(N)

ans = 18

        有关创建模式对象的函数列表,可以参考pattern。

在多个分隔符处拆分字符串

        创建一个字符串。从 R2017a 开始,可以使用双引号创建字符串。

str = "A horse! A horse! My kingdom for a horse!"

str = 
"A horse! A horse! My kingdom for a horse!"

        在感叹号和空白字符处拆分 str。newStr 是一个 10×1 字符串数组。最后一个字符串为空字符串 "",因为 str 中的最后一个字符是分隔符。

newStr = split(str,[" ","!"])


newStr = 12x1 string
    "A"
    "horse"
    ""
    "A"
    "horse"
    ""
    "My"
    "kingdom"
    "for"
    "a"
    "horse"
    ""

沿指定维度定向字符串

        创建一个包含姓名的 3×1 字符串数组。从 R2017a 开始,可以使用双引号创建字符串。

names = ["Mary Butler";
         "Santiago Marquez";
         "Diana Lee"]

names = 3x1 string
    "Mary Butler"
    "Santiago Marquez"
    "Diana Lee"

        在空白字符处拆分数组。默认情况下,split 沿大小为 1 的第一个尾随维度定向输出子字符串。因为 names 是一个 3×1 字符串数组,所以 split 沿 splitNames 的第二个维度(即列)来定向子字符串。

splitNames = split(names)


splitNames = 3x2 string
    "Mary"        "Butler" 
    "Santiago"    "Marquez"
    "Diana"       "Lee"    

        要沿行(即第一个维度)定向子字符串,请在指定分隔符之后指定维度。splitNames 现在是一个 2×3 字符串数组,名在第一行,姓在第二行。

splitNames = split(names," ",1)

splitNames = 2x3 string
    "Mary"      "Santiago"    "Diana"
    "Butler"    "Marquez"     "Lee"  

拆分字符串并返回分隔符

        创建一个字符串。从 R2017a 开始,可以使用双引号创建字符串。

str = "bacon, lettuce, and tomato"


str = 
"bacon, lettuce, and tomato"

        在分隔符处拆分 str。在一个字符串数组中返回拆分结果,在第二个字符串数组中返回分隔符。当连续的分隔符之间没有任何文本时,split 将返回空字符串。

[newStr,match] = split(str,["and",","," "])

newStr = 7x1 string
    "bacon"
    ""
    "lettuce"
    ""
    ""
    ""
    "tomato"

match = 6x1 string
    ","
    " "
    ","
    " "
    "and"
    " "

        使用 join 函数将 newStr 和 match 重新联接起来。

originalStr = join(newStr,match)

originalStr = 
"bacon, lettuce, and tomato"

输入参数

str - 输入文本

        输入文本,指定为字符串数组、字符向量或字符向量元胞数组。

delimiter - 分隔子字符串

分隔子字符串,指定为下列值之一:

  • 字符串数组

  • 字符向量

  • 字符向量元胞数组

  • ​pattern 数组(自 R2020b 开始提供)

        ​​在 delimiter 中指定的子字符串不会显示在输出 newStr 中。

​        ​在一个字符串数组、字符向量元胞数组或 pattern 数组中指定多个分隔符。split 函数根据 delimiter 的元素拆分 str。分隔符在 delimiter 中显示的顺序无关紧要,除非有多个分隔符都从 str 中的同一字符处开始匹配。在这种情况下,split 函数将在 delimiter 中的第一个匹配分隔符处进行拆分。

dim - 拆分字符串时所沿的维度

        拆分字符串时所沿的维度,指定为正整数。如果不指定 dim,则默认值为大小不等于 1 的最后一个数组维度。

输出参数

newStr - 从原始数组拆分出来的子字符串

        从原始数组拆分出来的子字符串,以字符串数组或字符向量元胞数组形式返回。如果输入数组 str 是字符串数组,则 newStr 也是字符串数组。否则,newStr 为字符向量元胞数组。

match - 找到的分隔符

        标识的分隔符,以字符串数组或字符向量元胞数组形式返回。如果输入数组 str 是字符串数组,则 match 也是字符串数组。否则,match 为字符向量元胞数组。

        match 包含的元素总是比输出 newStr 包含的元素少一个。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐