2010-06-10 23 views
1

나는 약간의 질문이, 내가 (\ n "1 무한 루프"\ n "쿠퍼 티노, CA 95014", \ n USA \ n을)문자열에서 하위 문자열을 가져 오는 방법은 무엇입니까?

는 NSString 객체 이 있고 난 2 내의 문자열 선물을 원하는 .

지금까지 내가 stringByReplacingOccurrencesOfString 사용하고 있습니다 : 따옴표이 문자열에서 두번째 큰 따옴표 (Ex.Cupertino)의 첫 번째 쉼표 (내 캐릭터는 동적 참고) : "CupertinoCA95014"USA

"을 1InfiniteLoop"를 얻을 수 및 수를

그러나 여전히 쿠퍼 티노를 얻을 수 없습니다.

다른 방법으로도이 문제를 해결할 수 있습니까?

답변

13

사용하십시오 substringWithRange: :

NSRange r = NSMakeRange(20, 29); 
NSString *cup = [yourString substringWithRange: r]; 

귀하의 코멘트에 대한 설명 후, 나는이 원래 문자열의 구조의 측면에서 얼마나 일관성에 많이 의존

NSString *cup = (NSString*)[[yourString componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString: @",\""]] objectAtIndex: 4]; 
+0

안녕하세요 luvieere, 답장을 보내 주셔서 감사합니다.하지만 두 번째 큰 따옴표와 두 번째 따옴표 (Ex.Cupertino)의 첫 번째 쉼표 내에서 부분 문자열을 가져오고 싶습니다. 내 문자열이 동적이므로 범위를 수정할 수 없습니다. 그것. – raaz

+0

@raaz 새로운 솔루션을 확인하십시오 – luvieere

+0

안녕 Luvieere, 그것은 매력처럼 작동합니다. 도움말 – raaz

1

말하고 싶지만 구분 문자.

게시 될 때 항상 정확하게 일 경우 luvieere의 대답은 매우 훌륭하고 컴팩트합니다.

레이아웃이 항상 일치하지만, 경우

각 캐릭터 라인의 내용 않을 수 없습니다 - 예를 들어, 첫 번째 주소 줄에 쉼표가 포함되어있을 경우 - 두 개의 패스를 사용하는 것이 좋을 것이다 :

// remember, kids: hard coded number literals are evil 
NSString* secondQuotedString = (NString*)[[componentsSeparatedByString:@"\""] objectAtIndex:3]; 
NSString* upToComma = (NString*)[[componentsSeparatedByString:@","] objectAtIndex:0]; 

중첩 된 구조가 신뢰할 수없는 경우 (예 : 문자열 내에 이스케이프 된 따옴표 문자가있을 수있는 경우) 문제가 발생하지 않도록 추가 구문 분석을 수행해야합니다.

관련 문제