字符数组 #
一、字符数组概述 #
字符数组(char array)是MATLAB传统的文本类型,使用单引号创建:
matlab
% 字符数组
str = 'Hello World';
class(str) % 'char'
% 与字符串对比
str2 = "Hello World";
class(str2) % 'string'
二、创建字符数组 #
2.1 基本创建 #
matlab
% 单引号创建
str1 = 'Hello';
str2 = '世界';
str3 = '123';
% 空字符数组
empty_char = '';
% 字符数组连接
str = ['Hello', ' ', 'World']; % 'Hello World'
2.2 特殊字符 #
matlab
% 转义字符(使用双单引号)
str1 = 'It''s a test'; % It's a test
% 特殊控制字符
str2 = ['Line1', newline, 'Line2'];
str3 = ['Col1', char(9), 'Col2']; % Tab
% 常用控制字符
backspace = char(8); % 退格
tab = char(9); % 制表符
newline = char(10); % 换行
carriage = char(13); % 回车
2.3 多行字符数组 #
matlab
% 使用分号
str = ['Line 1'; 'Line 2'; 'Line 3'];
% 注意:每行长度必须相同
% str = ['Hello'; 'Hi']; % 错误:长度不同
% 使用char函数自动填充
str = char('Hello', 'Hi', 'Hey');
% 结果:
% Hello
% Hi
% Hey
% 使用cell数组
cells = {'Line 1'; 'Line 2'; 'Line 3'};
str = char(cells);
三、字符数组操作 #
3.1 索引访问 #
matlab
str = 'Hello World';
% 单个字符
ch = str(1); % 'H'
ch = str(end); % 'd'
% 子串
sub = str(1:5); % 'Hello'
sub = str(7:end); % 'World'
% 反向索引
sub = str(end:-1:1); % 'dlroW olleH'
3.2 连接 #
matlab
% 水平连接
str1 = 'Hello';
str2 = 'World';
str = [str1, ' ', str2]; % 'Hello World'
% 使用strcat
str = strcat(str1, str2); % 'HelloWorld'(注意无空格)
str = strcat(str1, ' ', str2); % 'Hello World'
% 使用horzcat
str = horzcat(str1, ' ', str2);
3.3 分割 #
matlab
str = 'Hello World MATLAB';
% 按空格分割
parts = strsplit(str); % {'Hello', 'World', 'MATLAB'}
% 指定分隔符
str = 'a,b,c,d';
parts = strsplit(str, ','); % {'a', 'b', 'c', 'd'}
% 限制分割次数
parts = strsplit(str, ',', 'DelimiterType', 'RegularExpression');
3.4 查找与替换 #
matlab
str = 'Hello World World';
% 查找
pos = strfind(str, 'World'); % [7, 13]
% 替换
new_str = strrep(str, 'World', 'MATLAB');
% 'Hello MATLAB MATLAB'
% 大小写转换
upper(str) % 'HELLO WORLD WORLD'
lower(str) % 'hello world world'
3.5 去除空白 #
matlab
str = ' Hello World ';
% 去除两端空白
trimmed = strtrim(str); % 'Hello World'
% 去除右侧空白
deblank(str); % ' Hello World'
% 注意:strtrim和deblank只处理空白字符
四、字符数组与字符串转换 #
4.1 字符数组转字符串 #
matlab
% string函数
char_arr = 'Hello World';
str = string(char_arr); % "Hello World"
% 多行字符数组
char_arr = ['Line 1'; 'Line 2'];
str = string(char_arr); % ["Line 1"; "Line 2"]
4.2 字符串转字符数组 #
matlab
% char函数
str = "Hello World";
char_arr = char(str); % 'Hello World'
% 字符串数组
strs = ["Hello", "World"];
char_arr = char(strs); % 多行字符数组
% Hello
% World
4.3 cell数组转换 #
matlab
% 字符数组cell
cells = {'Hello', 'World'};
% 转为字符数组
char_arr = char(cells); % 多行字符数组
% 转为字符串数组
strs = string(cells); % ["Hello", "World"]
% 字符数组转cell
str = 'Hello';
cell_str = cellstr(str); % {'Hello'}
% 多行字符数组转cell
str = ['Line 1'; 'Line 2'];
cells = cellstr(str); % {'Line 1'; 'Line 2'}
五、字符与ASCII码 #
5.1 字符转ASCII #
matlab
% double函数
ch = 'A';
code = double(ch); % 65
% 字符串转ASCII数组
str = 'Hello';
codes = double(str); % [72 101 108 108 111]
% abs函数
code = abs('A'); % 65
5.2 ASCII转字符 #
matlab
% char函数
code = 65;
ch = char(code); % 'A'
% ASCII数组转字符串
codes = [72 101 108 108 111];
str = char(codes); % 'Hello'
% 生成字母表
letters = char(65:90); % 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
letters = char(97:122); % 'abcdefghijklmnopqrstuvwxyz'
5.3 常用ASCII值 #
| 字符 | ASCII值 |
|---|---|
| ‘0’-‘9’ | 48-57 |
| ‘A’-‘Z’ | 65-90 |
| ‘a’-‘z’ | 97-122 |
| 空格 | 32 |
| 换行 | 10 |
| 制表符 | 9 |
六、字符数组比较 #
6.1 相等比较 #
matlab
str1 = 'Hello';
str2 = 'World';
str3 = 'Hello';
% strcmp
strcmp(str1, str2) % 0(false)
strcmp(str1, str3) % 1(true)
% 忽略大小写
strcmpi('Hello', 'HELLO') % 1(true)
% 比较前n个字符
strncmp('Hello', 'Help', 3) % 1
strncmpi('Hello', 'HELP', 3) % 1
6.2 字典序比较 #
matlab
% 比较字符数组
str1 = 'apple';
str2 = 'banana';
% 直接比较(逐字符比较ASCII值)
str1 < str2 % 逐元素比较
% 使用sort排序
fruits = {'banana', 'apple', 'cherry'};
sorted = sort(fruits); % {'apple', 'banana', 'cherry'}
七、格式化输出 #
7.1 sprintf #
matlab
% 格式化字符串
name = '张三';
age = 25;
str = sprintf('%s今年%d岁', name, age);
% '张三今年25岁'
% 格式说明符
% %s - 字符串
% %c - 单个字符
% %d - 整数
% %f - 浮点数
% %e - 科学计数法
% 精度控制
pi_str = sprintf('%.4f', pi); % '3.1416'
7.2 fprintf #
matlab
% 输出到命令窗口
fprintf('Hello %s\n', 'World');
% 输出到文件
fid = fopen('output.txt', 'w');
fprintf(fid, '数据: %d\n', 42);
fclose(fid);
八、实用示例 #
8.1 字符串处理 #
matlab
% 统计字符出现次数
function count = countChar(str, ch)
count = sum(str == ch);
end
% 示例
str = 'Hello World';
count = countChar(str, 'l'); % 3
8.2 文本解析 #
matlab
% 解析CSV行
line = '张三,25,北京,工程师';
% 方法1:strsplit
fields = strsplit(line, ',');
name = fields{1};
age = str2double(fields{2});
% 方法2:textscan
data = textscan(line, '%s%d%s%s', 'Delimiter', ',');
name = data{1}{1};
age = data{2};
8.3 文件名处理 #
matlab
% 提取文件扩展名
function ext = getFileExtension(filename)
[~, ~, ext] = fileparts(filename);
end
% 提取文件名(不含扩展名)
function name = getFileName(filename)
[~, name, ~] = fileparts(filename);
end
% 示例
filename = 'data_2024.csv';
ext = getFileExtension(filename); % '.csv'
name = getFileName(filename); % 'data_2024'
九、字符数组 vs 字符串 #
9.1 主要区别 #
| 特性 | 字符数组 (char) | 字符串 (string) |
|---|---|---|
| 创建方式 | 单引号 ' ' |
双引号 " " |
| 类型 | 字符数组 | string对象 |
| 索引 | 字符级别 | 字符串级别 |
| 内存 | 连续存储 | 对象引用 |
| 推荐度 | 兼容旧代码 | 新项目推荐 |
9.2 使用建议 #
matlab
% 新项目:优先使用string
str = "Hello World";
parts = split(str); % 更直观
% 需要兼容旧代码:使用char
str = 'Hello World';
% 性能敏感场景:char可能更快
% 大量字符串操作:string更方便
十、总结 #
本章学习了:
- 创建字符数组:单引号、char函数
- 操作字符数组:索引、连接、分割、查找替换
- 类型转换:char与string互转
- ASCII码:字符与编码转换
- 比较操作:strcmp、strcmpi
- 格式化输出:sprintf、fprintf
- 与字符串的区别:选择合适的类型
下一章将学习MATLAB的逻辑类型。
最后更新:2026-03-27