NSStringが特定の文字で始まるかどうかを確認する方法


210

NSStringが特定の文字(文字*)で始まるかどうかをどのように確認しますか。

*はセルのタイプのインジケーターであるため、*なしのこのNSStringの内容が必要ですが、*が存在するかどうかを知る必要があります。

回答:


453

次の-hasPrefix:方法を使用できますNSString

Objective-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 2013

ここで私の質問を参照してください^^:stackoverflow.com/questions/18019660/...
adamdehaven

素敵な答え!ありがとう@Rob Keniger
Ganesh Guturi

1
CFStringHasPrefix()は、「Toll Free Bridging」により、NSStringsでも使用できます。CFStringHasPrefix()のパフォーマンスは2〜3倍優れているようです(少なくとも私のデータセットを使用する場合)。したがって、パフォーマンスが重要な領域で使用する場合は、代わりにCFStringHasPrefix()を試してください。
John Bowers、

12

以下を使用できます。

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

3
unicharsにメッセージを送信することはできません。おそらく、それらはNSStringsと等しくありません。
Chuck

8

hasPrefixは特によく機能します。たとえば、httpのURLをで探しているNSString場合は、を使用componentsSeparatedByStringNSArrayて配列を作成し、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, 

parameter aStringは、探している文字列です。戻り値は、aStringがレシーバーの開始文字と一致する場合はYES、そうでない場合はNOです。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

私がたまたま見つけたこの素敵な小さなコードは、Stackで提案されたコードをまだ見ていません。削除または変更したい文字が存在する場合にのみ機能します。これは多くのシナリオで便利です。文字が存在しない場合、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行は、3つのアクションを1つで実行するのが非常に簡単です。

  1. 文字列をチェックして、不要な文字を探します
  2. それらを好きなものに置き換えることができます
  3. 周囲のコードには影響しません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.