2014-06-06 3 views
1

문자열에서 줄무늬를 어떻게 지울 수 있습니까?matlab에서 문자열의 줄무늬를 삭제합니다.

내가 내가 솔루션

v(find(filter([1 1], 2, v == ' ') == 1)) = [] 

를 발견하지만 난 어떻게 작동하는지 이해하지

i hate extra blanks in my strings! 

을 원하는

i hate extra blanks  in my strings! 

있을 때 (나는 이것을 읽으려고 http://www.mathworks.de/de/help/matlab/data_analysis/filtering-data.html#bqm3i7m-3). 더 간단한 해결책이 있습니까? 아니면 누군가 위의 해결책을 설명해 주실 수 있습니까?

답변

3
v(strfind(v, ' ')) = [] 

빈 칸으로 마지막 칸과 빈 칸을 제외한 모든 칸을 제거합니다.

+0

나는 이것이 가장 단순하다고 생각한다. 고마워! – janSO

+0

@janSO 오신 것을 환영합니다. – timgeb

2

간단한 방법은 새로운 R2013a의 strjoinregexp

>> v='i hate extra blanks  in my strings!'; 
>> p=regexp(v, '\s+', 'split'); % Split Using regex pattern more or more space 
>> [p{1} sprintf(' %s', p{2:end})] % Form the new array of chars 

ans = 

i hate extra blanks in my strings! 

을 사용하는 것입니다, 당신은 할 수 있어야

strjoin(p, ' '); % instead of last step 
3

더 간단한 REGEX :

>> str = 'i hate extra blanks  in my strings!'; 
>> regexprep(str, '\s+', ' ') 
ans = 
i hate extra blanks in my strings! 
+0

내 matlab 버전에서는이 함수 regexprep을 사용할 수 없습니다. – janSO

+0

어떤 버전을 실행하고 있습니까? 나는 그것을 [R13sp2] (10 년 전부터 나온 것입니다!)보다 훨씬 뒤로 볼 수 있습니다. – Amro

+0

내 실수는, 나는 그 기능을 가지고있다. 당신의 해결책도 좋습니다. 가능한 한 빨리 투표 할 것입니다. 필터 솔루션에 대한 설명은 – janSO

2

MATLAB 함수가 있습니다. (, deblank 등) 문자열의 앞이나 끝에서 추가 공백을 제거 할 수 있습니다. 그러나 내가 중심에서 추가 공백을 접을 수는 없다는 것을 알고 있습니다. regexp이 이미 있으니 이미 찾은 코드에 대한 설명을 드리겠습니다.

시작하려면 예제의 filter 부분을 살펴 보겠습니다. filter은 문자열이 아닌 숫자에서 작동하므로 v == ' '은 문자열을 일련 번호로 변환하기 만합니다. 여기서 1은 공백이며 0은 공백이 아닙니다. 우리는 무엇을보고 개별적으로이 부분을 실행할 수 있습니다 필터 자체가 기본적으로 바로 문자열을 통해 두 개의 인접한 값 ([1 1]/2)의 평균을 취하고있다

v2 = filter([1 1], 2, v == ' '); 

. 이렇게하면 바로 앞에 다른 공백이있는 공백이있는 1과 그 직전에 공백이있는 공백이있는 0 또는 0.5가 나타납니다. 여분의 공백 만 필터에 1을 반환합니다.

코드를 감싸는 코드는 "필터가 하나를 반환하는 위치를 찾고 문자열의 해당 부분을 빈 것으로 대체합니다"(예 : 제거)라고 말합니다. 실제로 find가 필요하지, 직접 논리적 색인이 할 수 있습니다 :

v(filter([1 1], 2, v == ' ') == 1) = []; 

또 다른 개선이 빈 (예를 들어 isspace 안타 탭과 다른 것들을 더 많은 종류를 캡처하므로, v == ' '보다는 isspace를 사용하는 것 이는 ' '이 아님).

v(filter([1 1], 2, isspace(v)) == 1) = []; 

논리 인덱싱 + = [];는 다양한 유형의 원치 않는 데이터를 제거하기 위해 MATLAB에서 매우 일반적인 방법입니다. 이것이 데이터를 재구성 할 경우 신중해야합니다 (예 ::-) ...하지만,

>>v='i hate extra blanks  in my strings!'; 
>>while(~strcmp(v, strrep(v, ' ',' '))), v=strrep(v,' ',' '); end;                                                                     v = 'i love wasting processor cycles!'; 
>>v 

v = 

i love wasting processor cycles! 

나는 그것이 codeboxing에 속한다고 생각하십시오 dumbness 그것의에 대한 그냥

x = randi(10,[5 5]); % outputs a 5 x 5 matrix 
x(x==5)=[]; % output will be 1 x n 
+0

+1입니다. 그래도 지나치게 까다 롭습니다. – timgeb

+0

아마 내 첫번째 선택이 아니 겠지만 ('strfind' 제안이 마음에 들었습니다.)'filter'는 사람들이 좋아하는 MATLAB 망치입니다;) – nkjt

+0

당신의 자세한 설명을 가져 주셔서 감사합니다. 나는 아직 투표 할 수 없지만 한 번 할 수 있습니다. – janSO

0

:이 작업을 수행 할 경우 원래 정방 행렬은 벡터가된다

관련 문제