私の質問は Objective-Cで文字列に別の文字列が含まれているかどうかを確認するにはどうすればよいですか? に似ています。
文字列(NSString)に別の小さい文字列が含まれているかどうかを、大文字と小文字を区別せずに確認するにはどうすればよいですか?
NSString *string = @"hello bla bla";
私は次のようなものを望んでいました:
NSLog(@"%d",[string containsSubstring:@"BLA"]);
とにかく、文字列に大文字と小文字を区別しない別の文字列が含まれているかどうかを確認する方法はありますか?ただし、両方の文字列を大文字または小文字に変換しないでください。
リンクで提供されている回答と同様ですが、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!");
}
IOS 8から、containsString:
またはlocalizedCaseInsensitiveContainsString
メソッドをNSStringに追加できます。
if ([string localizedCaseInsensitiveContainsString:@"BlA"]) {
NSLog(@"string contains Case Insensitive bla!");
} else {
NSLog(@"string does not contain bla");
}
NSString *string = @"hello BLA";
if ([string rangeOfString:@"bla" options:NSCaseInsensitiveSearch].location == NSNotFound) {
NSLog(@"string does not contain bla");
} else {
NSLog(@"string contains bla!");
}
メソッド
[string rangeOfString:@"bla" options:NSCaseInsensitiveSearch];
あなたを助ける必要があります。
-(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
の場合に例外を発生させます。
Swift 4の回答を更新
extension String
{
func containsCaseInsensitive(string : String) -> Bool {
return self.localizedCaseInsensitiveContains(string)
}
}
使用法:
print("Hello".containsCaseInsensitive(string: "LLO"))
出力:
true
それが役に立てば幸い。ハッピーコーディング。