2013-05-28 6 views
3

매우 간단 질문 :Java의 replaceAll ("\ p {Cntrl}", "")에 Objective-C (NSString)에 상응하는 것이 있습니까?

는 아이폰 OS 개발자가 문자열에 전화 자바의 완전히 대체 ("\ P는 {되지만 Ctrl}", "")로 같은 일을 할 수있는 NSString 객체로 사용할 수있는 오브젝티브 C에 해당이 있습니까?

우리는 이미 자바이있다 : 사전에

NSString *noControlCharsString = [maybeHasControlCharsString stringByReplacingControlCharsWithString:@""]; 

감사 :

String noControlCharsString = maybeHasControlCharsString.replaceAll("\\p{Cntrl}", ""); 

내가 너무 목표 - C에서 이런 일을 할 수 있습니다.

AG3

답변

2

시도는이 문자를 대체하는 데 사용됩니다 ..이 하나를 사용합니다.

NSString *str = @"\\p{Cntrl}AB/bar:baz\\p{Cntrl}foo"; 
    NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"\\p{Cntrl}"]; 
    str = [[str componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""]; 
    NSLog(@"%@", str); 

다른 현명한 이 전체 문자열을 대체하는 데 사용됩니다.

NSString *str = @"\\p{Cntrl} This is a string \\p{Cntrl}"; 

    str = [str stringByReplacingOccurrencesOfString:@"\\p{Cntrl}" 
              withString:@""]; 

     NSLog(@"%@", str); 
+1

감사하지만, "\\의 P {내 메뉴}"자바에서 사용 실제로 특별히에 나타날 수있는 모든 제어 문자와 일치하는 정규식입니다 문자열 - 특수 문자를 구성하는 실제 문자 만이 아닙니다. 내가 그 제어 문자를 찢어 솔루션을 찾고 있어요. –

+0

하나의 문자 또는 전체 문자열로 대체 하시겠습니까? –

1

NSStringstringByReplacingOccurrencesOfString 방법은 자바 방법으로 동일한 패턴 \ P는 {되지만 Ctrl}을 받아들이는 NSRegularExpressionSearch 옵션이 있습니다

NSString *maybeHasControlCharsString = @"\nabc\r\ndef\r"; 
NSString *noControlCharsString = 
    [maybeHasControlCharsString stringByReplacingOccurrencesOfString:@"\\p{Cntrl}" 
             withString:@"" 
              options:NSRegularExpressionSearch 
              range:NSMakeRange(0, [maybeHasControlCharsString length])]; 
NSLog(@"%@", noControlCharsString); 
// Output: abcdef 
0

시도 :

NSString *noControlCharsString = [maybeHasControlCharsString stringByTrimmingCharactersInSet:controlCharacterSet]; 

EDIT Martin R이 말한 것처럼 위의 명령은 선행 또는 후행의 일치 항목 만 제거합니다. 여기

문자열에서 모든 일치 스트립 카테고리 방법입니다 :

- (NSString *)stringByStrippingCharactersInSet:(NSCharacterSet *)set { 
    NSString *r = [self stringByTrimmingCharactersInSet:set]; 
    NSArray *components = [r componentsSeparatedByCharactersInSet:set]; 
    components = [components filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self <> ''"]]; 
    return [components componentsJoinedByString:@""]; 
} 
+0

'stringByTrimmingCharactersInSet'은 * leading *와 * trailing * 문자 만 제거하므로' "\ nA \ nB \ n"'는 "A \ nB"'가됩니다. 중간 제어 문자는 대체되지 않습니다. –

+0

Martin 감사합니다. 네, 처음으로 기여한 것은 틀렸어. ( – ijwelch

+0

에 오신 것을 환영합니다! 새 코드가 올바르게 보이면'stringByTrimmingCharactersInSet'에 대한 호출을 제거 할 수도 있습니다 - (나는'componentsSeparatedByCharactersInSet'을 사용하는 것을 좋아하지 않습니다. 문자열을 필터링하는 것은 많은 임시 객체를 생성하기 때문입니다.) –