在MATLAB中建立一個字串非常簡單。 事實上,在前面的範例中我們已經使用了很多次。 例如,在命令提示字元下鍵入以下內容:
my_string = 'Yiibai Yiibai'
MATLAB執行上述語句並返回以下結果 -
Trial>> my_string = 'Yiibai Yiibai'
my_string =
'Yiibai Yiibai'
MATLAB將所有變數視為陣列,並將字串視為字元陣列。使用whos
命令來檢查上面建立的變數 -
Trial>> whos
Name Size Bytes Class Attributes
ans 1x92 184 char
my_string 1x16 32 char
x 1x3 360 cell
有趣的是,可以使用uint8
或uint16
等數位轉換函式將字串中的字元轉換為數位程式碼。 char
函式將整數向量轉換回到字元 -
範例
建立指令碼檔案並在其中鍵入以下程式碼 -
my_string = 'Yiibai''s Tutorial';
str_ascii = uint8(my_string) % 8-bit ascii values
str_back_to_char= char(str_ascii)
str_16bit = uint16(my_string) % 16-bit ascii values
str_back_to_char = char(str_16bit)
執行上面範例程式碼,得到以下結果 -
str_ascii =
1×17 uint8 行向量
1 至 15 列
89 105 105 98 97 105 39 115 32 84 117 116 111 114 105
16 至 17 列
97 108
str_back_to_char =
'Yiibai's Tutorial'
str_16bit =
1×17 uint16 行向量
1 至 15 列
89 105 105 98 97 105 39 115 32 84 117 116 111 114 105
16 至 17 列
97 108
str_back_to_char =
'Yiibai's Tutorial'
到目前為止,我們討論的字串是一維字元陣列; 然而,我們需要儲存更多維度的資料。在程式中儲存更多的維度文字資料。這是通過建立矩形字元陣列來實現的。
建立矩形字元陣列的最簡單的方式是根據需要垂直或水平連線兩個或更多個一維字元陣列。
通過以下任一方式垂直組合字串 -
使用MATLAB連線運算子[]
並用分號(;
)分隔每一行。 請注意,在這種方法中,每行必須包含相同數量的字元。對於不同長度的字串,應該根據需要填充空格字元。
使用char
函式。如果字串的長度不同,則char
將較短的字串填充到尾部空白處,以使每行具有相同的字元數。
建立指令碼檔案並在其中鍵入以下程式碼 -
doc_profile = ['Bara Tli '; ...
'Sr. Surgeon '; ...
'R N Tagore Cardiology Research Center']
doc_profile = char('Bara Tli', 'Sr. Surgeon', ...
'RN Tagore Cardiology Research Center')
執行檔案時,會顯示以下結果 -
Trial>> doc_profile = ['Bara Tli '; ...
'Sr. Surgeon '; ...
'R N Tagore Cardiology Research Center']
doc_profile = char('Bara Tli', 'Sr. Surgeon', ...
'RN Tagore Cardiology Research Center')
doc_profile =
3×37 char 陣列
'Bara Tli '
'Sr. Surgeon '
'R N Tagore Cardiology Research Center'
doc_profile =
3×36 char 陣列
'Bara Tli '
'Sr. Surgeon '
'RN Tagore Cardiology Research Center'
可以通過以下任一方式水平組合字串 -
[]
並用逗號(;
)或空格分隔輸入字串。該方法保留輸入陣列中的任何尾隨空格。strcat
。 此方法會刪除輸入中的尾隨空格。範例
建立指令碼檔案並在其中鍵入以下程式碼 -
name = 'Myra Yli ';
position = 'Sr. Surgeon ';
worksAt = 'R N Tagore Cardiology Research Center';
profile = [name ', ' position ', ' worksAt]
profile = strcat(name, ', ', position, ', ', worksAt)
執行上面範例程式碼,得到以下結果 -
Trial>> name = 'Myra Yli ';
position = 'Sr. Surgeon ';
worksAt = 'R N Tagore Cardiology Research Center';
profile = [name ', ' position ', ' worksAt]
profile = strcat(name, ', ', position, ', ', worksAt)
profile =
'Myra Yli , Sr. Surgeon , R N Tagore Cardiology Research Center'
profile =
'Myra Yli,Sr. Surgeon,R N Tagore Cardiology Research Center'
從前面的學習中,很明顯,組合不同長度的字串可能會很痛苦,因為陣列中的所有字串都必須具有相同的長度。在字串的末尾使用了空格,使其長度相等。
然而,組合字串的更有效的方法是將生成的陣列轉換為單元格陣列。
MATLAB單元格陣列可以在陣列中儲存不同大小和型別的資料。單元格陣列提供了一種更靈活的方法來儲存不同長度的字串。
cellstr
函式將字元陣列轉換為字串的單元格陣列。
建立指令碼檔案並在其中鍵入以下程式碼 -
name = 'Myra Tli ';
position = 'St. Sargeon ';
worksAt = 'R N Tagore Cardiology Research Center';
profile = char(name, position, worksAt);
profile = cellstr(profile);
disp(profile)
執行上面範例程式碼,得到以下結果 -
Trial>> name = 'Myra Tli ';
position = 'St. Sargeon ';
worksAt = 'R N Tagore Cardiology Research Center';
profile = char(name, position, worksAt);
profile = cellstr(profile);
disp(profile)
'Myra Tli'
'St. Sargeon'
'R N Tagore Cardiology Research Center'
MATLAB提供了許多字串函式來建立,組合,解析,比較和操作字串。
下表簡要介紹了MATLAB中的字串函式。
用於儲存字元陣列中的文字,組合字元陣列等的函式 -
函式 | 描述 |
---|---|
blanks |
建立空白字串 |
cellstr |
從字元陣列建立字串陣列 |
char |
轉換為字元陣列(字串) |
iscellstr |
確定輸入是字串的單元格陣列 |
ischar |
確定專案是否是字元陣列 |
sprintf |
將資料格式化為字串 |
strcat |
水平連線字串 |
strjoin |
將單元格中的字串連線到單個字串中 |
識別字串部分,查詢和替換子串的函式 -
函式 | 描述 |
---|---|
ischar |
確定專案是否是字元陣列 |
isletter |
陣列元素是否為字母 |
isspace |
陣列元素是空格 |
isstrprop |
確定字串是否是指定的類別 |
sscanf |
從字串讀取格式化資料 |
strfind |
在另一個字串中查詢一個字串 |
strrep |
查詢並替換子串 |
strsplit |
在指定的分隔符處拆分字串 |
strtok |
字串的選定部分 |
validatestring |
檢查文字字串的有效性 |
symvar |
確定表示式中的符號變數 |
regexp |
匹配正規表示式(區分大小寫) |
regexpi |
匹配正規表示式(不區分大小寫) |
regexprep |
用正規表示式替換字串 |
regexptranslate |
用正規表示式替換字串 |
字串比較的函式 -
函式 | 描述 |
---|---|
strcmp |
比較字串(區分大小寫) |
strcmpi |
比較字串(不區分大小寫) |
strncmp |
比較字串的前n 個字元(區分大小寫) |
strncmpi |
比較字串的前n 個字元(不區分大小寫) |
將字串更改為大寫或小寫,建立或刪除空格的函式 -
函式 | 描述 |
---|---|
deblank |
從字串末尾剝去尾隨空格 |
strtrim |
從字串中刪除前導和尾隨的空格 |
lower |
將字串轉換為小寫 |
upper |
將字串轉換為大寫字母 |
strjust |
對齊字元陣列 |
以下範例說明了一些上述字串函式 -
格式化字串
建立指令碼檔案並在其中鍵入以下程式碼 -
A = pi*1000*ones(1,5);
sprintf(' %f \n %.2f \n %+.2f \n %12.2f \n %012.2f \n', A)
執行上面範例程式碼,得到以下結果 -
ans = 3141.592654
3141.59
+3141.59
3141.59
000003141.59
字串連線
建立指令碼檔案並在其中鍵入以下程式碼 -
%cell array of strings
str_array = {'red','blue','green', 'yellow', 'orange'};
% Join strings in cell array into single string
str1 = strjoin(str_array, "-")
str2 = strjoin(str_array, ",")
執行上面範例程式碼,得到以下結果 -
str1 = red-blue-green-yellow-orange
str2 = red,blue,green,yellow,orange
查詢和替換字串
建立指令碼檔案並在其中鍵入以下程式碼 -
students = {'Bara Ali', 'Neha Bhatnagar', ...
'Nonica Malik', 'Madhu Gautam', ...
'Nadhu Sharma', 'Bhawna Sharma',...
'Muha Ali', 'Reva Dutta', ...
'Tunaina Ali', 'Sofia Kabir'};
% The strrep function searches and replaces sub-string.
new_student = strrep(students(8), 'Reva', 'Poulomi')
% Display first names
first_names = strtok(students)
執行上面範例程式碼,得到以下結果 -
Trial>> students = {'Bara Ali', 'Neha Bhatnagar', ...
'Nonica Malik', 'Madhu Gautam', ...
'Nadhu Sharma', 'Bhawna Sharma',...
'Muha Ali', 'Reva Dutta', ...
'Tunaina Ali', 'Sofia Kabir'};
% The strrep function searches and replaces sub-string.
new_student = strrep(students(8), 'Reva', 'Poulomi')
% Display first names
first_names = strtok(students)
new_student =
1×1 cell 陣列
{'Poulomi Dutta'}
first_names =
1×10 cell 陣列
1 至 7 列
{'Bara'} {'Neha'} {'Nonica'} {'Madhu'} {'Nadhu'} {'Bhawna'} {'Muha'}
8 至 10 列
{'Reva'} {'Tunaina'} {'Sofia'}
比較字串
建立指令碼檔案並在其中鍵入以下程式碼 -
str1 = 'This is test'
str2 = 'This is text'
if (strcmp(str1, str2))
sprintf('%s and %s are equal', str1, str2)
else
sprintf('%s and %s are not equal', str1, str2)
end
執行上面範例程式碼,得到以下結果 -
str1 = This is test
str2 = This is text
ans = This is test and This is text are not equal