https://ww2.mathworks.cn/help/matlab/characters-and-strings.html
创建字符向量
通过将字符序列括在单引号中来创建一个字符向量。
chr = 'Hello, world'
chr =
'Hello, world'
字符向量为 char 类型的 1×n 数组。在计算机编程中,字符串是表示 1×n 字符数组的常用术
语。但是,从 R2016b 开始,MATLAB 同时提供 string 数据类型,因此 1×n 字符数组在
MATLAB 文档中称为字符向量。
whos chr
Name Size Bytes Class Attributes
chr 1x12 24 char
如果文本包含单个引号,请在分配字符向量时放入两个引号。
newChr = 'You''re right'
newChr =
'You're right'
uint16 等函数将字符转换为其数值代码。
chrNumeric = uint16(chr)
chrNumeric =
1×12 uint16 row vector
72 101 108 108 111 44 32 119 111 114 108 100
char 函数将整数向量重新转换为字符。
chrAlpha = char([72 101 108 108 111 44 32 119 111 114 108 100])
要将字符向量合并到二维字符数组中,请使用方括号或 char 函数。
• 应用 MATLAB 串联运算符 []。使用分号 (;) 分隔每一行。每一行都必须包含相同数量的字
符。例如,合并长度相同的三个字符向量:
devTitle = ['Thomas R. Lee'; ...
'Sr. Developer'; ...
'SFTware Corp.']
devTitle =
3×13 char array
'Thomas R. Lee'
'Sr. Developer'
'SFTware Corp.'
如果字符向量的长度不同,请根据需要用空格字符填充。例如:
mgrTitle = ['Harold A. Jorgensen '; ...
'Assistant Project Manager'; ...
'SFTware Corp. ']
调用 char 函数。如果字符向量的长度不同,char 将用尾随空格填充较短的向量,以使每
一行具有相同数量的字符。
mgrTitle = char('Harold A. Jorgensen', ...
'Assistant Project Manager', 'SFTware Corp.')
mgrTitle =
3×25 char array
'Harold A. Jorgensen '
'Assistant Project Manager'
'SFTware Corp. '
水平合并字符向量
要将字符向量合并到一个行向量中,请使用方括号或 strcat 函数。
• 应用 MATLAB 串联运算符 []。用逗号或空格分隔输入字符向量。此方法可保留输入数组中
的任何尾随空格。
name = 'Thomas R. Lee';
title = 'Sr. Developer';
company = 'SFTware Corp.';
fullName = [name ', ' title ', ' company]
MATLAB 返回
fullName =
'Thomas R. Lee, Sr. Developer, SFTware Corp.'
调用串联函数 strcat。此方法可删除输入中的尾随空格。例如,组合字符向量以创建一个
假设的电子邮件地址。
name = 'myname ';
domain = 'mydomain ';
ext = 'com ';
address = strcat(name, '@', domain, '.', ext)
address =
'[email protected]'
使用以下任何函数标识字符数组,或者标识字符数组中的某些字符。
函数 说明
ischar 确定输入是否为字符数组
isletter 查找输入字符数组中的所有英文字母
isspace 查找输入字符数组中的所有空格字符
isstrprop 查找特定类别的所有字符
查找字符向量中的空格。
chr = 'Find the space characters in this character vector';
% | | | | | | |
% 5 9 15 26 29 34 44
find(isspace(chr))
ans =
5 9 15 26 29 34 44
使用空格字符
blanks 函数会创建一个包含空字符的字符向量。创建一个包含 15 个空格字符的向量。字符
向量始终会显示在单引号之间。
chr = blanks(15)
chr =
' '
在空白字符向量的中间插入一些非空格字符。
chr(6:10) = 'AAAAA'
chr =
' AAAAA '
您可以使用 strjust 函数将这些字符的位置向左或向右对齐:
chrLeft = strjust(chr,'left')
chrLeft =
'AAAAA '
chrRight = strjust(chr,'right')
chrRight =
' AAAAA'
使用 deblank 删除所有尾随空格字符:
chrDeblank = deblank(chr)
chrDeblank =
' AAAAA'
使用 strtrim 删除所有前导和尾随空格:
chrTrim = strtrim(chr)
chrTrim =
'AAAAA'
字符数组中的数据
有时,字符表示的数据并不对应到文本,例如 DNA 序列。您可以将此类数据存储在数据类型
为 char 的字符数组中。字符数组使用单引号。
seq = 'GCTAGAATCC';
whos seq
Name Size Bytes Class Attributes
seq 1x10 20 char
数组的每个元素都包含单个字符。
seq(4)
ans =
'A'
使用方括号串联字符数组,就像串联数值数组一样。
seq2 = [seq 'ATTAGAAACC']
seq2 =
'GCTAGAATCCATTAGAAACC'
在字符串数组引入之前编写的程序中,字符数组很常见。接受 string 数据的所有 MATLAB 函
数都能接受 char 数据,反之亦然
创建字符串数组
R2016b 中引入了字符串数组。字符串数组可存储文本片段,并提供一组用于将文本按数据进
行处理的函数。您可以对字符串数组进行索引、重构和进行串联,就像处理任何其他类型的数
组一样。此外,还可以访问字符串中的字符,并使用 plus 运算符向字符串追加文本。要重新
排列字符串数组中的字符串,请使用 split、 join 和 sort 等函数。
根据变量创建字符串数组
MATLAB® 提供字符串数组来存储文本片段。字符串数组的每个元素都包含一个 1×n 字符序
列。
从 R2017a 开始,您可以使用双引号创建字符串。
当您处理文本时,将字符序列括在双引号中。可以将文本赋给变量。
t = "Hello, world";
如果文本包含双引号,请在定义中使用两个双引号。
q = "Something ""quoted"" and something else."
q =
"Something "quoted" and something else."
作为备选方法,您可以使用 string 函数将字符向量转换为字符串。 chr 为一个 1×17 字符向
量。 str 为一个与该字符向量具有相同文本的 1×1 字符串。
chr = 'Greetings, friend'
chr =
'Greetings, friend'
str = string(chr)
str =
"Greetings, friend"
使用 [] 运算符创建一个包含多个字符串的字符串数组。 str 是一个 2×3 字符串数组,其中包
含六个字符串。
str = ["Mercury","Gemini","Apollo";
"Skylab","Skylab B","ISS"]
str = 2x3 string array
"Mercury" "Gemini" "Apollo"
"Skylab" "Skylab B" "ISS"
作为备选方法,您可以使用 string 函数将字符向量元胞数组转换为字符串数组。MATLAB 使
用双引号显示字符串数组中的字符串,使用单引号显示元胞数组中的字符向量。
C = {'Mercury','Venus','Earth'}
C = 1x3 cell array
{'Mercury'} {'Venus'} {'Earth'}
str = string(C)
str = 1x3 string array
"Mercury" "Venus" "Earth"
要将文本添加到字符串的末尾,请使用加号运算符 +。
f = 71;
c = (f-32)/1.8;
tempText = "Temperature is " + c + "C"
tempText =
"Temperature is 21.6667C"
与数值数组类似,字符串数组可以有多个元素。使用 strlength 函数求数组中每个字符串的长
度。
A = ["a","bb","ccc"; "dddd","eeeeee","fffffff"]
A =
2×3 string array
strlength(A)
除了字符向量,您还可以使用 string 函数将数值、日期时间、持续时间和分类值转换为字符
串。
将数值数组转换为字符串数组。
X = [5 10 20 3.1416];
string(X)
ans = 1x4 string array
"5" "10" "20" "3.1416"
将日期时间值转换为字符串。
d = datetime('now');
string(d)
ans =
"03-Feb-2019 10:12:54"
将字符串串联到字符串数组中
将字符串串联到字符串数组中,就像您串联任何其他类型的数组一样。
使用方括号 [] 串联两个字符串数组。
str1 = ["Mercury","Gemini","Apollo"];
str2 = ["Skylab","Skylab B","ISS"];
str = [str1 str2]
str = 1x6 string array
"Mercury" "Gemini" "Apollo" "Skylab" "Skylab B" "ISS"
转置 str1 和 str2。将它们进行串联,然后将列标题垂直串联到字符串数组上。当您将字符向
量串联到字符串数组中时,字符向量会自动转换为字符串。
str1 = str1';
str2 = str2';
str = [str1 str2];
str = [["Mission:","Station:"] ; str]
str = 4x2 string array
"Mission:" "Station:"
"Mercury" "Skylab"
"Gemini" "Skylab B"
"Apollo" "ISS"
字符串相关函数
字符串数组
string |
字符串数组 |
strings |
创建不包含字符的字符串数组 |
join |
合并字符串 |
字符数组
char |
字符数组 |
cellstr |
转换为字符向量元胞数组 |
blanks |
创建空白字符数组 |
newline |
创建换行符 |
字符或字符串数组
compose |
将数据格式化为多个字符串 |
sprintf |
将数据格式化为字符串或字符向量 |
strcat |
水平串联字符串 |
append |
合并字符串 |
转换输入参数
convertCharsToStrings |
将字符数组转换为字符串数组,其他数组不变 |
convertStringsToChars |
将字符串数组转换为字符数组,其他数组不变 |
convertContainedStringsToChars |
在元胞数组或结构体的任何级别转换字符串数组 |
在数值和字符串之间转换
double |
双精度数组 |
string |
字符串数组 |
str2double |
将字符串转换为双精度值 |
num2str |
将数字转换为字符数组
|
ischar |
确定输入是否为字符数组 |
iscellstr |
确定输入是否为字符向量元胞数组 |
isstring |
确定输入是否为字符串数组 |
isStringScalar |
确定输入是否为包含一个元素的字符串数组 |
文本属性
strlength |
字符串长度 |
isstrprop |
确定输入字符串中的哪些字符属于指定类别 |
isletter |
确定哪些字符为字母 |
isspace |
确定哪些字符是空白字符 |
查找
contains |
确定字符串中是否有模式 |
count |
计算字符串中模式的出现次数 |
endsWith |
确定字符串是否以模式结尾 |
startsWith |
确定字符串是否以模式开头 |
strfind |
在其他字符串中查找字符串 |
sscanf |
从字符串读取格式化数据 |
替换
replace |
查找并替换一个或多个子字符串 |
replaceBetween |
替换起点和终点之间的子字符串 |
strrep |
查找并替换子字符串
|
join |
合并字符串 |
split |
在分隔符处拆分字符串 |
splitlines |
在换行符处拆分字符串 |
strjoin |
联接数组中的字符串 |
strsplit |
在指定分隔符处拆分字符串或字符向量 |
strtok |
所选的字符串部分 |
erase |
删除字符串内的子字符串 |
eraseBetween |
删除起点和终点之间的子字符串 |
extractAfter |
提取指定位置后的子字符串 |
extractBefore |
提取指定位置前的子字符串 |
extractBetween |
提取起点和终点之间的子字符串 |
insertAfter |
在指定的子字符串后插入字符串 |
insertBefore |
在指定的子字符串前插入字符串 |
pad |
为字符串添加前导或尾随字符 |
strip |
删除字符串中的前导和尾随字符 |
lower |
将字符串转换为小写 |
upper |
将字符串转换为大写 |
reverse |
反转字符串中的字符顺序 |
deblank |
删除字符串末尾的尾随空白 |
strtrim |
从字符串中删除前导和尾随空白 |
strjust |
对齐字符串
|
strcmp |
比较字符串 |
strcmpi |
比较字符串(不区分大小写) |
strncmp |
比较字符串的前 n 个字符(区分大小写) |
strncmpi |
比较字符串的前 n 个字符(不区分大小写) |
regexp |
匹配正则表达式(区分大小写) |
regexpi |
匹配正则表达式(不区分大小写) |
regexprep |
使用正则表达式替换文本 |
regexptranslate |
将文本转换为正则表达式 |
整数和浮点数据
MATLAB® 中的数值类包括有符号和无符号整数、单精度和双精度浮点数。
默认情况下,MATLAB 以双精度浮点形式存储所有数值。(您不能更改默认类型和精度。)您可以选择以整数或单精度形式存储任何数值或数值数组。
与双精度数组相比,以整数和单精度数组形式存储数据更节省内存。
所有数值类型都支持基本的数组运算,例如添加下标、重构和数学运算。
double |
双精度数组 |
single |
单精度数组 |
int8 |
8 位有符号整数数组 |
int16 |
16 位有符号整数数组 |
int32 |
32 位有符号整数数组 |
int64 |
64 位有符号整数数组 |
uint8 |
8 位无符号整数数组 |
uint16 |
16 位无符号整数数组 |
uint32 |
32 位无符号整数数组 |
uint64 |
64 位无符号整数数组 |
cast |
将变量转换为不同的数据类型 |
typecast |
在不更改基础数据的情况下转换数据类型 |
isinteger |
确定输入是否为整数数组 |
isfloat |
确定输入是否为浮点数组 |
isnumeric |
确定输入是否为数值数组 |
isreal |
确定数组是否为实数数组 |
isfinite |
确定数组元素是否为有限值 |
isinf |
确定数组元素是否为无限值 |
isnan |
判断查询数组元素是否包含 NaN 值 |
eps |
浮点相对精度 |
flintmax |
浮点格式的最大连续整数 |
Inf |
创建所有值均为 Inf 的数组 |
intmax |
指定整数类型的最大值 |
intmin |
指定整数类型的最小值 |
NaN |
创建所有值均为 NaN 的数组 |
realmax |
最大的正浮点数 |
realmin |
最小的标准正浮点数
|
MATLAB 默认情况下以双精度浮点形式 (double
) 存储数值数据。要以整数形式存储数据,您需要从 double
转换为所需的整数类型。使用上表中所示的转换函数之一。
例如,如果要以 16 位有符号整数形式存储赋给变量 x
的值 325
,请键入
x = int16(325);
如果要转换为整数的数值带有小数部分,MATLAB 将舍入到最接近的整数。如果小数部分正好是 0.5
,则 MATLAB 会从两个同样临近的整数中选择绝对值大小更大的整数:
x = 325.499; int16(x) ans = int16 325 x = x + .001; int16(x) ans = int16 326
在将其他类(例如字符串)转换为整数时,这些整数转换函数也很有用:
str = 'Hello World'; int8(str) ans = 1×11 int8 row vector 72 101 108 108 111 32 87 111 114 108 100
如果您将 NaN
值转换为整数类,则结果为该整数类中的 0
值。例如,
int32(NaN) ans = int32 0
数值的显示格式
默认显示
默认情况下,MATLAB® 将数值输出显示为 5 位数的定标定点值。您可以将数值的显示方式更改为以下任意方式:
5 位数的定标定点、浮点或这两种方式中的最佳方式
15 位数的定标定点、浮点或这两种方式中的最佳方式
小整数的比率
十六进制(以 16 为基数)
Bank 表示法
format 参考页中列出了所有可用格式。
要更改数值显示设置,请使用 format 函数或预设对话框(可通过 MATLAB 文件菜单访问)。format 函数只在单个 MATLAB 会话期间更改数值的显示方式,
而您的“预设”设置则会从一个会话到下一个会话都保持活动状态。这些设置仅影响数值的显示方式,而不影响 MATLAB 计算或保存数值的方式。
为 x 设置一个整数值并以十六进制(以 16 为基数)格式显示:
format hex
x = uint32(876543210)
x =
343efcea
将格式设置为 5 位数的浮点格式:
format short e
x
x =
1.3333e+00 1.2345e-06
设置 x 的值并以 5 位数的定标定点格式显示:
x = [4/3 1.2345e-6]
x =
1.3333 0.0000
确定数值类
您可以使用以下任意命令检查变量 x 的数据类型。
whos x
显示 x 的数据类型。
xType = class(x);
将 x 的数据类型赋予变量。
isnumeric(x)
确定 x 是否为数值类型。
isa(x, 'integer')
isa(x, 'uint64')
isa(x, 'float')
isa(x, 'double')
isa(x, 'single')
确定 x 是否为指定的数值类型。(此处显示了任意整数、无符号的 64 位整数、任意浮点数、双精度数和单精度数的示例)。
isreal(x)
确定 x 是实数还是复数。
isnan(x)
确定 x 是否不是数值 (NaN)。
isinf(x)
确定 x 是否为无限值。
isfinite(x)
确定 x 是否为有限值。
合并不同的整数类型
概述
如果您在矩阵中合并不同的整数类型(例如有符号与无符号,或 8 位整数与 16 位整数),MATLAB® 将返回所有元素都属于一个公共类型的矩阵。MATLAB 将生成矩阵的所有元素设置为输入矩阵中的最左侧元素的数据类型。例如,以下串联生成由 3 个 16 位有符号整数组成的向量:
A = [int16(450) uint8(250) int32(1000000)]
合并不同大小的整数的示例
禁用如上所示的整数串联警告后,一次串联下面的两个数字,然后转换它们的顺序。返回值取决于整数的串联顺序。最左侧的类型决定着向量中的所有元素的数据类型:
A = [int16(5000) int8(50)]
A =
5000 50
B = [int8(50) int16(5000)]
B =
50 127
第一个操作返回由 16 位整数组成的向量。第二个操作返回由 8 位整数组成的向量。元素 int16(5000) 设置为 127,即 8 位有符号整数的最大值。
相同规则也适用于垂直串联:
C = [int8(50); int16(5000)]
C =
50
127
合并有符号与无符号整数的示例
现在使用有符号与无符号整数做相同的练习。同样,最左侧的元素决定着生成矩阵中的所有元素的数据类型:
A = [int8(-100) uint8(100)]
A =
-100 100
B = [uint8(100) int8(-100)]
B =
100 0
元素 int8(-100) 设为零,因为它不再有符号。
MATLAB 在将每个元素串联为一个合并数组之前计算每个元素。换句话说,在合并两个元素前,以下语句的计算结果为一个 8 位有符号整数(等于 50)和一个 8 位无符号整数(无符号的 -50 设为零)。按照该串联,第二个元素保留其零值,但采用无符号 int8 类型:
A = [int8(50), uint8(-50)]
A =
50 0
数据类型检测函数
iscalendarduration |
确定输入是否为日历持续时间数组 |
iscategorical |
确定输入是否为分类数组 |
iscell |
确定输入是否为元胞数组 |
iscellstr |
确定输入是否为字符向量元胞数组 |
ischar |
确定输入是否为字符数组 |
isdatetime |
确定输入是否为日期时间数组 |
isduration |
确定输入是否为持续时间数组 |
isenum |
确定变量是否为枚举 |
isfloat |
确定输入是否为浮点数组 |
isgraphics |
对有效的图形对象句柄为 True |
isinteger |
确定输入是否为整数数组 |
isjava |
确定输入是否为 Java 对象 |
islogical |
确定输入是否为逻辑数组 |
isnumeric |
确定输入是否为数值数组 |
isobject |
确定输入是否为 MATLAB 对象 |
isreal |
确定数组是否为实数数组 |
isstring |
确定输入是否为字符串数组 |
isstruct |
确定输入是否为结构体数组 |
istable |
确定输入是否为表 |
istimetable |
确定输入是否为时间表 |
is* |
检测状态 |
isa |
确定输入是否具有指定数据类型 |
class |
对象的类 |
validateattributes |
检查数组的有效性 |
whos |
列出工作区中的变量及大小和类型 |
数值数组、字符数组、元胞数组、结构体或表格之间的转换
char |
字符数组 |
cellstr |
转换为字符向量元胞数组 |
int2str |
将整数转换为字符 |
mat2str |
将矩阵转换为字符 |
num2str |
将数字转换为字符数组 |
str2double |
将字符串转换为双精度值 |
str2num |
将字符数组或字符串转换为数值数组 |
native2unicode |
将数值字节转换为 Unicode 字符表示形式 |
unicode2native |
将 Unicode 字符表示形式转换为数值字节 |
base2dec |
将以 N 为基数表示数字的文本转换为十进制数字 |
bin2dec |
将用文本表示的二进制数字转换为十进制数字 |
dec2base |
将十进制数字转换为以 N 为基数的数字的字符向量 |
dec2bin |
将十进制数字转换为表示二进制数字的字符向量 |
dec2hex |
将十进制数字转换为表示十六进制数字的字符向量 |
hex2dec |
将十六进制数字的文本表示形式转换为十进制数字 |
hex2num |
将 IEEE 十六进制字符串转换为双精度数字 |
num2hex |
将单精度和双精度值转换成 IEEE 十六进制字符串 |
table2array |
将表转换为同构数组 |
table2cell |
将表转换为元胞数组 |
table2struct |
将表转换为结构体数组 |
array2table |
将同构数组转换为表 |
cell2table |
将元胞数组转换为表 |
struct2table |
将结构体数组转换为表 |
cell2mat |
将元胞数组转换为基础数据类型的普通数组 |
cell2struct |
将元胞数组转换为结构体数组 |
mat2cell |
将数组转换为在元胞中包含子数组的元胞数组 |
num2cell |
将数组转换为相同大小的元胞数组 |
struct2cell |
将结构体转换为元胞数组 |
函数摘要
此表中列出的函数提供了多种将数值数据转换为字符数组的方法。
函数 | 说明 | 示例 |
char | 将正整数转换为等效的字符。(截断任何小数部分。) | [72 105] → 'Hi' |
string | 将包含双精度值的数组转换为字符串数组。 | [72 105] → "72" "105" [3.1416 2.178] → "3.1416" "2.178" |
int2str | 将正整数或负整数转换为字符类型。(对任何小数部分 四舍五入。) |
[72 105] → '72 105' |
num2str | 将数值类型转换为指定精度和格式的字符类型。 | [72 105] → '72/105/' (格式设置为 %1d/) |
mat2str | 将数值类型转换为指定精度的字符类型,并返回 MATLAB 可以计算的字符向量。 |
[72 105] → '[72 105]' |
dec2hex | 将正整数转换为字符类型的十六进制基数。 | [72 105] → '48 69' |
dec2bin | 将正整数转换为字符类型的二进制基数。 | [72 105] → '1001000 1101001' |
dec2base | 将正整数转换为字符类型的数字,基数可从 2 到 36。 | [72 105] → '110 151' |
将数字转换为字符代码
char 函数将整数转换为 Unicode 字符代码,并返回由对等字符构成的字符数组:
6 字符和字符串
6-56x = [77 65 84 76 65 66];
char(x)
ans =
'MATLAB'
将数字表示为文本
int2str、 num2str 和 mat2str 函数将数值表示为文本,其中每个字符表示输入值中一位单
独的数字。 int2str 和 num2str 函数常被用来为绘图添加标签。例如,下列线条使用
num2str 为绘图的 x 轴准备自动化标签:
function plotlabel(x, y)
plot(x, y)
chr1 = num2str(min(x));
chr2 = num2str(max(x));
out = ['Value of f from ' chr1 ' to ' chr2];
转换为特定基数
另一类转换函数将数值更改为字符数组,将十进制值用另一种基数形式表示,例如二进制或十
六进制表示形式。这些函数包括 dec2hex、 dec2bin 和 dec2base。
函数摘要
此表中列出的函数提供了多种将字符数组转换为数值数据的方法。
函数 | 说明 | 示例 |
uintN(例如 uint8) | 将字符转换为表示该字符的整数代码。 | 'Hi' → 72 105 |
str2num | 将字符类型转换为数值类型。 | '72 105' → [72 105] |
str2double | 与 str2num 类似,但提供更佳的性能,用于处理 字符串数组和字符向量元胞数组。 |
"72" "105" → [72 105] {'72' '105'} → [72 105] |
hex2num | 将数值类型转换为指定精度的字符类型,并返回 MATLAB 可以计算的字符数组。 |
'A' → '-1.4917e-154' |
hex2dec | 将数值类型的十六进制基数转换为正整数。 | 'A' → 10 |
bin2dec | 将字符类型的二进制数字转换为十进制数字。 | '1010' → 10 |
base2dec | 将字符类型的 2 到 36 内任何进制的数字转换为十 进制数字。 |
'12' → 10 (如果 base == 8) |
从特定基数转换
要将非十进制数字的字符表示转换为该数字的值,请使用以下函数之一:hex2num、
hex2dec、 bin2dec 或 base2dec。
hex2num 和 hex2dec 函数都接受十六进制(以 16 为基数)输入,但 hex2num 返回它表
示的 IEEE 双精度浮点数,而 hex2dec 则将输入转换为十进制整数