NSString이 특정 문자로 시작하는지 확인하는 방법


210

NSString이 특정 문자 (문자 *)로 시작하는지 어떻게 확인합니까?

*는 셀 유형에 대한 표시기이므로 * 없이이 NSString의 내용이 필요하지만 *가 존재하는지 알아야합니다.

답변:


453

다음 -hasPrefix:방법을 사용할 수 있습니다 NSString.

목표 -C :

NSString* output = nil;
if([string hasPrefix:@"*"]) {
    output = [string substringFromIndex:1];
}

빠른:

var output:String?
if string.hasPrefix("*") {
    output = string.substringFromIndex(string.startIndex.advancedBy(1))
}

이 동일한 방법을 사용하는 방법이 있습니까? 대신 ?에 hasPrefix:@"word"저장된 여러 값을 확인하십시오 NSArray. 예를 들면 다음과 같습니다. NSArray *words = [NSArray arrayWithObjects:@"foo",@"bar",@"baz",nil];?
adamdehaven

^^ 여기 내 질문을 참조하십시오 : stackoverflow.com/questions/18019660/…
adamdehaven

좋은 대답입니다! 감사합니다 @Rob Keniger
Ganesh Guturi

1
"무료 수신자 브리징"으로 인해 NSString에서 CFStringHasPrefix ()를 사용할 수도 있습니다. CFStringHasPrefix ()의 성능은 (적어도 내 데이터 세트를 사용할 때) 2-3 배 더 나은 것 같습니다. 따라서 성능에 민감한 영역에서 사용하는 경우 대신 CFStringHasPrefix ()를 사용해보십시오.
John Bowers

12

당신이 사용할 수있는:

NSString *newString;
if ( [[myString characterAtIndex:0] isEqualToString:@"*"] ) {
     newString = [myString substringFromIndex:1];
}

3
unichars로 메시지를 보낼 수 없으며 NSString과 같지 않을 것입니다.

8

hasPrefix 가 특히 잘 작동합니다. 예를 들어 당신이에 HTTP URL을 찾고 있다면 NSString, 당신은 사용하는 것이 componentsSeparatedByString을 생성 NSArray하고, 반복 처리하여 배열 hasPrefixhttp로 시작하는 요소를 찾을 수 있습니다.

NSArray *allStringsArray = 
   [myStringThatHasHttpUrls componentsSeparatedByString:@" "]

for (id myArrayElement in allStringsArray) {
    NSString *theString = [myArrayElement description];
    if ([theString hasPrefix:@"http"]) {
        NSLog(@"The URL  is %@", [myArrayElement description]);
    }

}

hasPrefix 주어진 문자열이 수신자의 시작 문자와 일치하는지 여부를 나타내는 부울 값을 리턴합니다.

- (BOOL)hasPrefix:(NSString *)aString, 

매개 변수 aString는 찾고자하는 문자열입니다. aString이 수신자의 시작 문자와 일치하면 리턴 값은 예이고, 그렇지 않으면 아니오입니다. aString비어 있으면 NO를 반환합니다 .



4
NSString *stringWithoutAsterisk(NSString *string) {
    NSRange asterisk = [string rangeOfString:@"*"];
    return asterisk.location == 0 ? [string substringFromIndex:1] : string;
}

4

또 다른 접근 방식 ..

누군가를 도울 수 있습니까?

if ([[temp substringToIndex:4] isEqualToString:@"http"]) {
  //starts with http
}

3

보다 일반적인 답변으로 hasPrefix 메소드를 사용해보십시오. 예를 들어 아래 코드는 문자열이 10으로 시작하는지 확인하여 특정 문제를 식별하는 데 사용되는 오류 코드입니다.

NSString* myString = @"10:Username taken";

if([myString hasPrefix:@"10"]) {
      //display more elegant error message
}


0

우연히 발견 된이 멋진 코드는 아직 스택에서 제안 된 것을 보지 못했습니다. 제거하거나 변경하려는 문자가 존재하는 경우에만 작동하며 많은 시나리오에서 편리합니다. 문자가 없으면 NSString을 변경하지 않습니다.

NSString = [yourString stringByReplacingOccurrencesOfString:@"YOUR CHARACTERS YOU WANT TO REMOVE" withString:@"CAN either be EMPTY or WITH TEXT REPLACEMENT"];

이것이 내가 사용하는 방법입니다.

//declare what to look for
NSString * suffixTorRemove = @"</p>";
NSString * prefixToRemove = @"<p>";
NSString * randomCharacter = @"</strong>";
NSString * moreRandom = @"<strong>";
NSString * makeAndSign = @"&";

//I AM INSERTING A VALUE FROM A DATABASE AND HAVE ASSIGNED IT TO returnStr
returnStr = [returnStr stringByReplacingOccurrencesOfString:suffixTorRemove withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:prefixToRemove withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:randomCharacter withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:moreRandom withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:makeAndSign withString:@"&"];

//check the output
NSLog(@"returnStr IS NOW: %@", returnStr);

이 한 줄은 세 가지 작업을 한 번에 수행하기가 매우 쉽습니다.

  1. 원하지 않는 문자를 문자열에서 확인합니다
  2. 원하는대로 바꿀 수 있습니다
  3. 주변 코드에 영향을 미치지 않습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.