1. 程式人生 > >Matlab 對字串的處理

Matlab 對字串的處理

字串例項:a='  a';b='b  b';c='cccc';m=''


1. 獲取字串長度
length
(a)    

2. 連線兩個字串,每個字串最右邊的空格被裁切

INPUT >>str1='Iloveyou';str2='123';

方法一:用中括號將str1str2像矩陣元素一樣包含起來:

>>SC=[str1,str2]

SC = Iloveyou123   

(若想驗證str1str2確實被連線起來,可呼叫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

(a,b,m)

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.'