2011-02-27 5 views
1

NSString's의 형식은 Johnny likes "eating" apples입니다. 내 문자열에서 따옴표를 제거하고 싶습니다. 사과NSScanner NSString에서 하위 문자열 인용 부호 제거

존 사과

나는 트릭을 할 NSScanner와 함께 놀았 던을 좋아하지만 내가 갖는된다 "먹는"

자니 좋아 일부 충돌.

- (NSString*)clean:(NSString*) _string 
{ 
    NSString *string = nil; 
    NSScanner *scanner = [NSScanner scannerWithString:_string]; 
    while ([scanner isAtEnd] == NO) 
    { 
     [scanner scanUpToString:@"\"" intoString:&string]; 
     [scanner scanUpToString:@"\"" intoString:nil]; 
     [scanner scanUpToString:@"." intoString:&string]; // picked . becuase it's not in the string, really just want rest of string scanned 
    } 
    return string; 
} 
+0

오류/오류 로그를 게시하십시오. – Dominic

답변

2

이 코드는 hacky이지만 원하는 출력을 생성하는 것으로 보입니다.
예상치 못한 입력 (설명 된 형식이 아닌 문자열, nil string ...)으로 테스트되지는 않았지만 시작해야합니다.

- (NSString *)stringByStrippingQuottedSubstring:(NSString *) stringToClean 
{ 
    NSString *strippedString, 
      *strippedString2; 

    NSScanner *scanner = [NSScanner scannerWithString:stringToClean]; 

    [scanner scanUpToString:@"\"" intoString:&strippedString];       // Getting first part of the string, up to the first quote 
    [scanner scanUpToString:@"\" " intoString:NULL];         // Scanning without caring about the quoted part of the string, up to the second quote 

    strippedString2 = [[scanner string] substringFromIndex:[scanner scanLocation]];  // Getting remainder of the string 

    // Having to trim the second part of the string 
    // (Cf. doc: "If stopString is present in the receiver, then on return the scan location is set to the beginning of that string.") 
    strippedString2 = [strippedString2 stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\" "]]; 

    return [strippedString stringByAppendingString:strippedString2]; 
} 

나는 그것을 청소 이상 (많이) 돌아와, 내가 놓친 게 무엇인지 파악하는 클래스 NSScanner의 문서로 드릴 및 수동 문자열 트리밍으로 돌봐했다됩니다.

+0

이것은 잘 작동하는 것 같습니다. param이 끝나지 않았는지 확인하기위한 체크를 추가했습니다. 괜찮다고 생각합니다. 고맙습니다! – Ternary

관련 문제