2013-02-12 3 views
2

URL이 포함될 수있는 트윗을 파싱하려고합니다. 다른 색상/글꼴로 URL의 서식을 지정하고 싶습니다. 그래서 분명히 URL은 텍스트의 어느 곳에 나 배치 될 수 있습니다.NSString에서 END_OF_LINE 또는 WHITESPACE 문자를 찾는 방법

NSString *urlString = @""; 
NSRange startRange = [self rangeOfString:@"http://" options:NSCaseInsensitiveSearch]; 

if (startRange.length) { 
    NSString *subStr = [self substringFromIndex:startRange.location]; 
    NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet]; 
    NSRange endRange = [subStr rangeOfCharacterFromSet:set]; 

    if (endRange.length) { 
     NSRange finalRange; 
     finalRange.location = startRange.location; 
     finalRange.length = endRange.location - 1; 
     NSString *finalString = [self substringWithRange:finalRange]; 
     debugTrace(@"finalString : %@", finalString); 
    } 
} 

return urlString; 

그래서 기본적으로 나는 텍스트 http://의 범위를 찾은 다음 마지막에 거기에서 문자열을 만들 : 그래서는 다음과 같습니다 카테고리 방법이있다. 그로부터 나는 처음으로 whitespaceAndNewlineCharacterSet을 찾고이를 URL의 끝으로 사용하여 finalString을 찾습니다. 그러나, 제가 찾을 수있는 올바른 NSCharacterSet를 사용하지하고 생각하게 라인

NSRange endRange = [subStr rangeOfCharacterFromSet:set];

반환 쓰레기 값의 내가 있도록 이것에 대해 갈 수있는 방법 endRange

Printing description of endRange: (NSRange) endRange = location=2147483647, length=0

URL이 끝난 곳을 찾습니다.

+0

쓰레기 값이 아니며 'NSNotFound'입니다. 하위 문자열에 공백이나 개행 문자가없는 것을 의미합니다. – WDUK

+0

물론, 나는 그게 무엇인지 불렀다. 감사 ! – unspokenblabber

답변

4

제 의견에 언급했듯이 이는 가비지 범위 값이 아니며 NSNotFound을 나타냅니다. 즉, 전달한 문자열에 공백이나 개행 문자가없는 것을 의미합니다 (유효한 경우). 따라서, 우리는 그것을 대비해야합니다.

코드에 따라 NSNotFound을 확인하도록 코드를 변경했습니다. 또한 finalRange 길이에서 1을 뺄 필요도 없습니다. 이 코드 샘플을 테스트했을 때 URL 문자열의 마지막 문자가 잘렸다. 변경/조회 된 행의 끝에 주석이 추가되었습니다.

NSString *urlString = @""; // Is this being used? 
NSRange startRange = [self rangeOfString:@"http://" options:NSCaseInsensitiveSearch]; 

if (startRange.length) { 
    NSString *subStr = [self substringFromIndex:startRange.location]; 
    NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet]; 
    NSRange endRange = [subStr rangeOfCharacterFromSet:set]; 

    if (endRange.location == NSNotFound) { // Check for NSNotFound 
     debugTrace(@"finalString : %@", subStr); 
    } 
    else if (endRange.length) { 
     NSRange finalRange; 
     finalRange.location = startRange.location; 
     finalRange.length = endRange.location; // No need to subtract 1 
     NSString *finalString = [self substringWithRange:finalRange]; 
     debugTrace(@"finalString : %@", finalString); 
    } 
} 

return urlString; 

나는 이것을 간략히 테스트했으며 작동하는 것으로 보인다.

+0

ohh duh .. 그것은 내 끝 부분에 멍청했다. 나는 옳은 일을하고 있었고,이 사건을 놓쳤다. 전에 NSNotFound를 더 잘 알았습니까 !! @WDUK 덕분에. 당신은 +1을 얻습니다. 나를 위해 같은 일을 돌봐! – unspokenblabber