Matlab 對字串的處理
字串例項:a=' a';b='b b';c='cccc';m=''
1. 獲取字串長度
length(a)
2. 連線兩個字串,每個字串最右邊的空格被裁切
方法一:用中括號將str1和str2像矩陣元素一樣包含起來:
>>SC=[str1,str2]
SC = Iloveyou123
(若想驗證str1和str2確實被連線起來,可呼叫length函式測試SC的長度.)
方法二:用strcat函式
>>SB=strcat(str1,str2)
SB = Iloveyou123
注意,strcat函式有許多用法,如下例:
>>strcat({'Red','Yellow'},{'Green','Blue'})
ans = 'RedGreen' 'YellowBlue'
但下句則結果就不一樣了:
>>strcat(['Red','Yellow'],['Green','Blue'])
ans = RedYellowGreenBlue
方法三:利用sprintf函式
>>STR=sprintf('%s%d',str1,number)
STR = Iloveyou123
3. 連線多行字串,每行長度可不等,自動把非最長字串最右邊補空格使與最長字串相等,會忽略空字串
e=strvcat
4.char連線,空字串會被空格填滿
f=char(a,b,m)
5.字串分割
我們在這裡藉助正則表示式函式regexp的split模式。一般語法:
S = regexp(str, char, 'split')
其中str是待分割的字串,char是作為分隔符的字元(可以使用正則表示式)。分割出的結果存在S中。
以下面這樣一串字元為例
Hello Nocturne Studio
首先去除首尾的多餘空格:
str = deblank(str)
例1:設這幾個字串是以製表符分隔的,可以這樣來做:
S = regexp(str, '\t', 'split')
例2:設這些字串是以一個或多個空格分隔的,可以用正則表示式來描述:
S = regexp(str, '\s+', 'split')
這樣,S(1)=’Hello’,S(2)=’Nocturne’,S(3)=’Studio’。
注意,上面得到的結果S是一個cell型變數,它的每個元素比如S(1)仍然是cell型的,只能用來display,不能直接用來進行字串操作(比如獲取其中的某個字元),所以我們在使用需要執行一次:
s1 = char(S(1))
這樣的s1才是一個真正的字串,可以進行後續的操作。
6. 判斷字串是否相等
% strcmp 比較兩個字串是否完全相等,是,返回真,否則,返回假
% strncmp 比較兩個字串前n個字元是否相等,是,返回真,否則,返回假
% strcmpi 比較兩個字串是否完全相等,忽略字母大小寫
% strncmpi 比較兩個字串前n個字元是否相等,忽略字母大小寫
% isletter 檢測字串中每個字元時否屬於英文字母
% isspace 檢測字串中每個字元是否屬於格式字元(空格,回車,製表,換行符等)
% isstrprop 檢測字元每一個字元是否屬於指定的範圍
a='d sdsdsd 15#';
b=isletter(a)
c=isspace(a)
7. 字串替換和查詢
% strrep 進行字串替換,區分大小寫
% strrep(str1,str2,str3)
% 它把str1中所有的str2字串用str3來替換
% strfind(str,patten) 查詢str中是否有pattern,返回出現位置,沒有出現返回空陣列
% findstr(str1,str2) 查詢str1和str2中,較短字串在較長字串中出現的位置,沒有出現返回空陣列
% strmatch(patten,str) 檢查patten是否和str最左側部分一致
% strtok(str,char) 返回str中由char指定的字串前的部分和之後的部分,
mm='youqwelcome';
[mm1,mm2]=strtok(mm,'q')
% blanks(n) 建立有n個空格組成的字串
% deblank(str) 裁切字串的尾部空格
% strtrim(str) 裁切字串的開頭和尾部的空格,製表,回車符
% lower(str) 將字串中的字母轉換成小寫
% upper(str) 將字串中的字母轉換成大寫
% sort(str) 按照字元的ASCII值對字串排序
% num2str 將數字轉換為數字字串
% str2num 將數字字串轉換為數字
% mat2str 將陣列轉換成字串
% int2str 把數值陣列轉換為整數數字組成的字元陣列
8. 字串分割
用Matlab實現字串分割(split)
我們在這裡藉助正則表示式函式regexp的split模式。一般語法:
S = regexp(str, char, 'split')
其中str是待分割的字串,char是作為分隔符的字元(可以使用正則表示式)。分割出的結果存在S中。
以下面這樣一串字元為例
Hello Nocturne Studio
首先去除首尾的多餘空格:
str = deblank(str)
例1:設這幾個字串是以製表符分隔的,可以這樣來做:
S = regexp(str, '\t', 'split')
例2:設這些字串是以一個或多個空格分隔的,可以用正則表示式來描述:
S = regexp(str, '\s+', 'split')
這樣,S(1)=’Hello’,S(2)=’Nocturne’,S(3)=’Studio’。
注意,上面得到的結果S是一個cell型變數,它的每個元素比如S(1)仍然是cell型的,只能用來display,不能直接用來進行字串操作(比如獲取其中的某個字元),所以我們在使用需要執行一次:
s1 = char(S(1))
這樣的s1才是一個真正的字串,可以進行後續的操作。
------------------------------
CELL陣列中的字串比較:
c=cell(2,1);
c(1,1)=cellstr('xxx');
c(2,1)=cellstr('yyyyyyy');
strcmp(c{1,1},c{2,1});
------------------------------
isequal Test arrays for equality, 可用來比較兩個字元陣列是否相同。
9. 字串合併和分割(空格)
合併
Join individual strings in a cell array ofstrings, C
, with a single space.
C = {'one','two','three'};
str = strjoin(C)
str = one two three
分割
str = 'The rain in Spain.';
C = strsplit(str)
C = 'The' 'rain' 'in' 'Spain.'