HOWTO · MATLAB

在 MATLAB 中对字符串进行转义字符序列

本教程演示了在 MATLAB 中在字符串中使用转义字符序列的方法。

本页内容

要在 MATLAB 文本中加入引号或反斜杠,首先要区分文本字面量和格式化处理。用单引号编写的字符向量会把反斜杠视为普通字符;sprintf 则会在生成格式化文本时解释 \n、\t 等反斜杠序列。了解这一区别,有助于选择合适的语法,生成所需字符或文本布局。

MATLAB 如何处理转义序列

MATLAB 对字符向量和格式化函数采用不同规则。在 'C:\Temp' 这样的字符向量中,反斜杠是字面字符,不会转义后面的字符。将 \n 这样的反斜杠序列传给 sprintf 时,它才有特殊含义:函数会将其转换为换行符。sprintf 还会处理 %s 和 %d 这样的格式占位符。

因此,仅在普通的单引号字符向量中输入 \n 并不会换行。需要格式化控制字符时,请使用会解释这些序列的函数。从其他语言移植示例时,也要牢记这一区别,因为有些语言会直接在字符串字面量中解释反斜杠。

使用 sprintf 创建转义序列

使用 sprintf 可以将文本与格式化序列组合起来。它的第一个输入是格式模式:\n 用于换行,\t 用于插入水平制表符,%s 等占位符则由后续输入替换。生成的文本可以显示或保存。

运行以下示例:

本节中的代码以及显示的标签或输出仍为英文。

apostrophe = 'It''s ready.';
quote = 'She said, "Hello, MATLAB!"';
path = 'C:\Temp\report.txt';
message = sprintf('%s\n%s\n%s\n\t%s', apostrophe, quote, path, 'Done');
fprintf('%s\n', message);
It's ready.
She said, "Hello, MATLAB!"
C:\Temp\report.txt
	Done

此输出来自 Octave。示例语法遵循 MATLAB 字符向量和 sprintf 的规则,但没有提供 MATLAB 的运行结果。代码示例及其显示的标签和输出文字保留英文。连续两个单引号表示字符向量中的一个单引号。path 中的双引号和单个反斜杠都是字面字符;格式模式中的反斜杠序列则由 sprintf 解释。

添加引号和反斜杠

在单引号字符向量中,连续写两个单引号即可表示一个单引号:'It''s ready.' 会生成 It's ready.。在这种字符向量语法中,双引号没有特殊含义,因此可以直接写入,无须加反斜杠:'She said, "Hello!"' 会生成 She said, "Hello!"。

字符向量中的反斜杠同样是字面字符。例如,'C:\Temp\report.txt' 会保留输入的反斜杠。如果需要由 sprintf 生成反斜杠,请在它的格式模式中写 \\,因为 sprintf 会将每对反斜杠解释为一个字面反斜杠。不要把格式化规则套用到普通字符向量字面量上。

添加换行和制表符

要换行或缩进,请在 sprintf 格式模式中使用 \n 和 \t。上面的示例用 \n 将各项分到不同的行,并用 \t 缩进 Done。制表符显示出来的宽度取决于显示文本的程序,因此对齐效果可能不同;sprintf 插入的是制表符字符本身。

如果已有文本,只想在显示时换行,可以在显示调用中添加换行符,例如 fprintf('%s\n', message)。disp 也会在显示文本后换行,但不会解释传入文本中的反斜杠序列。

排查字符串输出异常

如果 \n 显示为两个可见字符,请检查它是否写在字符向量中,而不是 sprintf 格式模式中。如果引号意外结束了字面量,请在单引号字符向量中将单引号写两次。在这种语法中,双引号可以直接书写,无须在前面加反斜杠。

如果路径中的反斜杠丢失或发生变化,请检查创建路径时使用的操作:普通字符向量会保留反斜杠,而格式化函数会处理反斜杠序列。生成格式化文本时,在 sprintf 模式中使用 \\,即可表示一个字面反斜杠。最后,检查格式字符串及其对应输入:%s 需要文本,而且每个占位符都应有对应的值。特征图中的引号示意行不够明确;在单引号字符向量中,双引号应直接书写,单引号则应写两次。区分字面文本规则和格式化行为,有助于更快定位输出异常。