比较文本
以不同的方式比较字符数组和字符串数组中的文本。您可以使用关系运算符和 strcmp
函数来比较字符串数组和字符向量。您可以使用 sort
函数对字符串数组进行排序,就像对任何其他类型的数组进行排序一样。MATLAB® 还提供用于检查文本片段中的字符的函数。例如,您可以确定字符向量或字符串数组中的哪些字符为字母或空格字符。
比较字符串数组是否相等
您可以使用关系运算符 ==
和 ~=
来比较字符串数组是否相等。当您比较字符串数组时,输出为一个逻辑数组。如果关系为 true,则该逻辑数组包含 1
;如果关系不为 true,则包含 0
。
创建两个字符串标量。您可以使用双引号创建字符串。
str1 = "Hello"; str2 = "World"; str1,str2
str1 = "Hello"
str2 = "World"
比较 str1
和 str2
是否相等。
str1 == str2
ans = logical
0
将一个包含多个元素的字符串数组与一个字符串标量进行比较。
str1 = ["Mercury","Gemini","Apollo";... "Skylab","Skylab B","International Space Station"]; str2 = "Apollo"; str1 == str2
ans = 2x3 logical array
0 0 1
0 0 0
将一个字符串数组与一个字符向量进行比较。只要其中一个变量为字符串数组,您就可以进行比较。
chr = 'Gemini';
TF = (str1 == chr)
TF = 2x3 logical array
0 1 0
0 0 0
使用 TF
对 str1
进行索引以提取与 Gemini
匹配的字符串元素。您可以使用逻辑数组对某个数组进行索引。
str1(TF)
ans = "Gemini"
使用 ~=
运算符进行不相等比较。对 str1
进行索引以提取与 'Gemini'
不匹配的元素。
TF = (str1 ~= chr)
TF = 2x3 logical array
1 0 1
1 1 1
str1(TF)
ans = 5x1 string
"Mercury"
"Skylab"
"Skylab B"
"Apollo"
"International Space Station"
比较两个非标量字符串数组。当您比较两个非标量数组时,这两个数组的大小必须相同。
str2 = ["Mercury","Mars","Apollo";... "Jupiter","Saturn","Neptune"]; TF = (str1 == str2)
TF = 2x3 logical array
1 0 1
0 0 0
对 str1
进行索引以提取匹配项。
str1(TF)
ans = 2x1 string
"Mercury"
"Apollo"
使用其他关系运算符比较字符串数组
您也可以使用关系运算符 >
、>=
、<
和 <=
来比较字符串。以大写字母开头的字符串位于以小写字母开头的字符串前面。例如,字符串 "ABC"
小于 "abc"
。数字和某些标点符号也位于字母前面。
"ABC" < "abc"
ans = logical
1
使用 >
运算符将一个包含名字的字符串数组与另一个名字进行比较。名字 Sanchez
、de Ponte
和 Nash
位于 Matthews
后面,因为 S
、d
和 N
都大于 M
。
str = ["Sanchez","Jones","de Ponte","Crosby","Nash"]; TF = (str > "Matthews")
TF = 1x5 logical array
1 0 1 0 1
str(TF)
ans = 1x3 string
"Sanchez" "de Ponte" "Nash"
对字符串数组排序
您可以对字符串数组进行排序。MATLAB® 使用 UTF-16 字符编码方案以 Unicode® 方式存储字符。字符和字符串数组按 UTF-16 代码点顺序进行排序。对于同时也是 ASCII 字符的字符,此顺序意味着大写字母在小写字母之前。数字和某些标点符号也在字母之前。
对字符串数组 str
进行排序。
sort(str)
ans = 1x5 string
"Crosby" "Jones" "Nash" "Sanchez" "de Ponte"
对一个 2×3 字符串数组进行排序。sort
函数会单独对每列中的元素进行排序。
sort(str2)
ans = 2x3 string
"Jupiter" "Mars" "Apollo"
"Mercury" "Saturn" "Neptune"
要对每行中的元素进行排序,请沿第二个维度对 str2
进行排序。
sort(str2,2)
ans = 2x3 string
"Apollo" "Mars" "Mercury"
"Jupiter" "Neptune" "Saturn"
比较字符向量
您可以对字符向量和字符向量元胞数组进行相互比较。使用 strcmp
函数比较两个字符向量,或者使用 strncmp
比较前 N
个字符。您也可以使用 strcmpi
和 strncmpi
进行不区分大小写的比较。
使用 strcmp
函数比较两个字符向量。chr1
和 chr2
不相同。
chr1 = 'hello'; chr2 = 'help'; TF = strcmp(chr1,chr2)
TF = logical
0
请注意,MATLAB strcmp
与 strcmp
的 C 版本不同。当两个字符数组相同而非不同时,strcmp
的 C 版本会返回 0
。
使用 strncmp
函数比较前两个字符。由于两个字符向量都以字符 he
开头,因此 TF
为 1
。
TF = strncmp(chr1,chr2,2)
TF = logical
1
比较两个字符向量元胞数组。strcmp
会返回一个与元胞数组大小相同的逻辑数组。
C1 = {'pizza'; 'chips'; 'candy'}; C2 = {'pizza'; 'chocolate'; 'pretzels'}; strcmp(C1,C2)
ans = 3x1 logical array
1
0
0
检查字符串数组和字符数组中的字符
您可以使用 isstrprop
、isletter
和 isspace
函数检查字符串数组或字符数组中的字符。
isstrprop
可检查字符串数组或字符数组中的字符。isletter
和isspace
函数只能检查字符数组中的字符。
确定字符向量中的哪些字符是空格字符。isspace
会返回一个与 chr
大小相同的逻辑向量。
chr = 'Four score and seven years ago';
TF = isspace(chr)
TF = 1x30 logical array
0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0
isstrprop
函数可以查询字符的许多不同特性。isstrprop
可以确定字符串或字符向量中的字符是字母、字母数字字符、十进制或十六进制数字还是标点字符。
确定字符串中的哪些字符是标点符号。isstrprop
会返回一个长度等于 str
中的字符数量的逻辑向量。
str = "A horse! A horse! My kingdom for a horse!"
str = "A horse! A horse! My kingdom for a horse!"
isstrprop(str,"punct")
ans = 1x41 logical array
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
确定字符向量 chr
中的哪些字符是字母。
isstrprop(chr,"alpha")
ans = 1x30 logical array
1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1
另请参阅
strcmp
| sort
| isstrprop
| isletter
| isspace
| eq
| ne
| gt
| ge
| le
| lt