web-dev-qa-db-ja.com

Objective-Cで大文字と小文字を区別しない別の文字列を検索します

私の質問は Objective-Cで文字列に別の文字列が含まれているかどうかを確認するにはどうすればよいですか? に似ています。

文字列(NSString)に別の小さい文字列が含まれているかどうかを、大文字と小文字を区別せずに確認するにはどうすればよいですか?

NSString *string = @"hello bla bla";

私は次のようなものを望んでいました:

NSLog(@"%d",[string containsSubstring:@"BLA"]);

とにかく、文字列に大文字と小文字を区別しない別の文字列が含まれているかどうかを確認する方法はありますか?ただし、両方の文字列を大文字または小文字に変換しないでください。

30
Jim

リンクで提供されている回答と同様ですが、optionsを使用します。

Apple doc- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)maskを参照してください。

NSString *string = @"hello bla bla";

if ([string rangeOfString:@"BLA" options:NSCaseInsensitiveSearch].location == NSNotFound)
{
    NSLog(@"string does not contain bla");
} 
else 
{
    NSLog(@"string contains bla!");
}
79
Ilanchezhian

IOS 8から、containsString:またはlocalizedCaseInsensitiveContainsStringメソッドをNSStringに追加できます。

if ([string localizedCaseInsensitiveContainsString:@"BlA"]) {
    NSLog(@"string contains Case Insensitive bla!");
} else {
    NSLog(@"string does not contain bla");
}
9
ajay_nasa
NSString *string = @"hello BLA";
if ([string rangeOfString:@"bla" options:NSCaseInsensitiveSearch].location == NSNotFound) {
    NSLog(@"string does not contain bla");
} else {
    NSLog(@"string contains bla!");
}
3

メソッド

[string rangeOfString:@"bla" options:NSCaseInsensitiveSearch];

あなたを助ける必要があります。

0
Pierre

-(NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask;を使用して部分文字列の範囲を取得でき、maskパラメーターを使用して大文字と小文字を区別しない一致を指定します。

例:

NSRange r = [str rangeOfString:@"BLA"
                       options:NSCaseInsensitiveSearch];

documentation で述べられているように、部分文字列が見つからない場合、メソッドは{NSNotFound, 0}のような範囲を返します。

BOOL b = r.location == NSNotFound;

Importantこのメソッドは、文字列がnilの場合に例外を発生させます。

0
user971401

Swift 4の回答を更新

extension String 
{
    func containsCaseInsensitive(string : String) -> Bool {
            return self.localizedCaseInsensitiveContains(string)
     }
}

使用法:

print("Hello".containsCaseInsensitive(string: "LLO"))

出力

true

それが役に立てば幸い。ハッピーコーディング。

0