2013-04-26 10 views
1

내가 얻을 다음과 같은 형식으로 결과 :점검 및 편집 인 NSMutableString

NSString *placeResult = @"111 Main Street, Cupertino, CA" 

때로는 결과가 장소의 이름이 포함

NSString *placeResult = @"Starbucks, 222 Main Street, Cupertino, CA" 

내가 확인해야을 경우 전에 먼저 텍스트 쉼표는 숫자 또는 영문자입니다. 문자가 알파벳 인 경우 NSMutableString에서 먼저 쉼표와 모든 알파벳을 제거한 다음 변수에 영문자 만 저장해야합니다. 그래서 두 번째 예제의 텍스트가 다음과 같이 표시됩니다

@"222 Main Street, Cupertino, CA" 

가 어떻게 NSRegularExpression, NSTextCheckingResult 및 인 NSMutableString와 함께이 작업을 수행 할 수 ?

나는 생각 해요 :

NSString *str= (NSString *)location.address; 
NSMutableString *muteStr; 
muteStr = [NSMutableString stringWithString:str]; 

    NSArray *matches = [detector matchesInString:muteStr options:0 range:NSMakeRange(0, muteStr.length)]; 

    for (NSTextCheckingResult *match in matches) 
    { 
     if (match.resultType == NSTextCheckingTypeAddress) 
     { 
      NSDictionary *data = [match addressComponents]; 
      NSString *name = data[NSTextCheckingNameKey]; 
      if (!name && match.range.location > 0) 
      { 
       NSRegularExpression *scan = [NSRegularExpression regularExpressionWithPattern:@"(?=)" options:0 error:NULL]; 
//******I'm not sure if I have regularExpressionWithPattern correct? 

       NSTextCheckingResult *result = [scan firstMatchInString:@"," options:0 range:NSMakeRange(0, name.length)]; 

무엇을 여기에서 할 심지어는 올바른 접근 방식인지 확실하지?

다시 말하지만 첫 번째 쉼표 앞의 텍스트가 숫자인지 영문인지 확인해야합니다. 텍스트/문자가 영문자이면 NSMutableString에서 첫 번째 쉼표와 모든 알파벳을 제거한 다음 변수에 영문자 만 저장해야합니다. 문자가 숫자 인 경우 NSMutableString을 그대로 두어야합니다.

내가 다른 접근 방식 선택할 것
+0

는 "알파벳"이란 무엇입니까)? –

+0

영문자 A-Z. – user1107173

답변

0

:

NSString *placeResult = @"Starbucks, 222 Main Street, Cupertino, CA"; 
// Split the NSString into an NSArray out of parts of the NSString 
NSArray *parts = [placeResult componentsSeparatedByString:@","]; 
// This NSMutableString will store our edited string 
NSMutableString *result = [[NSMutableString alloc] init]; 
// If there are only 3 NSStrings in parts it is only `Address`, `City` and `State` 
// so we can use it as is 
if (parts.count == 3) 
    [result appendString:placeResult]; 
// If there are 4 NSStrings in parts there is something in front of we don't need, 
// so we need to cut it off 
else if (parts.count == 4) { 
    // We start at `index 1` because at `index 0` is the element we don't want 
    int startIndex = 1; 
    // Here we append the first part and after that increment our index 
    [result appendFormat:@"%@", parts[startIndex++]]; 
    // We loop through the NSArray starting at `index 2`, our next element 
    for (; startIndex < parts.count; startIndex++) 
     // We append our new element with a comma in front of it 
     // Note that the string we append still starts with a space so we don't insert one here 
     [result appendFormat:@",%@",parts[startIndex]]; 
    // Now our string is completely stored in `result`. 
    // What we need to do now is cut off the first space which was included 
    // when we inserted the first element before the loop. 
    // I mean this space: @"Starbucks, 222 Main Street, Cupertino, CA"; 
    //        ↑ 
    // Our NSString usually does always has a space in front, so this if-clause is a little superfluous but in case you get a string without a space after every comma this cuts off your first letter 
    if ([[result substringWithRange:NSMakeRange(0, 1)] isEqualToString:@" "]) 
     // Delete the first character which definitely is a space 
     [result deleteCharactersInRange:NSMakeRange(0, 1)]; 
} 
// I'm pretty sure what we do here ;) 
NSLog(@"%@", result); 

출력 :

@"111 Main Street, Cupertino, CA"에 대한 : 012,367,743에 대한

111 메인 스트리트, 쿠퍼 티노을, CA

:

222 메인 스트리트, 쿠퍼 티노, CA

편집 :이 코드는 정확하게 당신이 원하는 것을,

+0

자세한 답장을 보내 주셔서 감사합니다. 미안하지만 오늘은 쉬고 있습니다. 나는 내일 이것을 시도하고 다시 당신에게 돌아갈거야. – user1107173

+0

귀하의 환영, 시간을내어;) – HAS

+0

감사합니다!. 질문 : For (; startIndex user1107173