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
나는 이것이 가장 단순하다고 생각한다. 고마워! – janSO
@janSO 오신 것을 환영합니다. – timgeb