2017-10-17 11 views
1

NSString의 문자 집합 앞에 특정 문자를 추가하고 싶습니다. 예를 들어NSString의 문자 집합에 특정 문자를 추가하는 방법

:

NSString *input = @"abc^ 123 # //> <";  
NSString *insertBefore = @"~"; 
NSCharacterSet *needBeInserted = [NSCharacterSet 
         characterSetWithCharactersInString:@"~#^/<>"]; 

예상 결과 : input에 나타납니다 needBeInserted의 모든 문자가 insertBefore을 추가합니다.

result = @"abc~^ 123 ~# ~/~/~> ~<"; 

우아한 방법이 있습니까? stringByReplacingOccurrencesOfString의 여러 줄을 사용하는 대신?

NSRange searchRange = NSMakeRange(0,[input length]); 
NSRange charRange; 
while((charRange = [input rangeOfCharactersFromSet:escapeSet options:NSBackwardSearch).length range:searchRange) 
{ 
    // It is allowed to have a 0-length range: Insertion 
    input = [input stringByReplacingCharactersInRange:NSMakeRange(charRange.location, 0) withString:@"\"]; 

    // Shorten the search range 
    searchRange = NSMakeRange(0, charRange.location); 
} 

Safari에서 글 :

+0

사용 ['escapedPattern'] (https://developer.apple.com/documentation/foundation/nsregularexpression/1408386-escapedpatternforstring?language=

Objective-C demo online를 참조하십시오 objc) –

+0

불행히도 '<' , '>'같은 일부 문자는 포함되지 않습니다. – user2131907

+0

하지만 정규식 안에서는 특별한 것이 아니며 탈출 할 필요가 없습니다. 질문에서 정확한 요구 사항 (탈출해야 할 문자는 무엇입니까?)을 정의하십시오. –

답변

1

당신은 character class로 문자를 넣어 정규 표현식을 기반으로 대체 사용할 수 있습니다 :

[~#^/<>] 

$0이 결과 문자열로 전체 일치하는 텍스트를 삽입 ~$0로 교체합니다. regex demo을 참조하십시오.

NSError *error = nil; 
NSString *input = @"abc^ 123 # //> <"; 
NSString *pat = @"[~#^/<>]"; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pat options:nil error:&error]; 
NSString *modifiedString = [regex stringByReplacingMatchesInString:input 
     options:0 
     range:NSMakeRange(0, [input length]) 
     withTemplate:@"~$0"]; 
NSLog(@"%@", modifiedString); 

결과 : abc~^ 123 ~# ~/~/~> ~<

0

당신은 문자를 검색하고 교체해야합니다. 가장자리 경우와 오타가 있는지 테스트해야합니다.

또 다른 방법은 문자 집합에서 (단일 문자) 문자열의 배열을 만들고 이스케이프 문자와 조합하여 이스케이프 문자를 바꿉니다. 나보다 복잡하고 덜 자연 스럽네.