目录
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 包含的元素少一个。