【Swift4】文字列(NSString)の置換・分割・検索(完全一致、前方一致、後方一致、部分一致)まとめ【Objective-C】

2020年8月29日

文字列の置換・分割・検索(完全一致、前方一致、後方一致、部分一致)の方法をまとめました。
文字列操作は色々できることがあるので覚えておくと便利だと思います。

1.置換

1-1.文字と文字の置き換え方法

Swift4

var string : String = "abcdefg"
string = string.replacingOccurrences(of: "defg", with: "abc")
// string = abcabc となる

Objective-C

NSString *string = @"abcdefg";
string = [string stringByReplacingOccurrencesOfString:@"defg" withString:@"abc"];
// string = abcabc となる

1-2.NSRangeによる置換方法

Swift4

var string : String = "abcdefg"
let range = string.range(of: "defg")
string = string.replacingCharacters(in: range!, with: "abc")
// string = abcabc となる

Objective-C

NSString *string = @"abcdefg";
NSRange range = [string rangeOfString:@"defg"];
string = [string stringByReplacingCharactersInRange:range withString:@"abc"];
// string = abcabc となる

NSRangeは開始位置とそこからの文字数を記録しています。
「abcdefg」という文字列から、「defg」というRangeを取ると
開始位置4 文字数4という風になっています。

2.分割

Swift4

var string = "abc,def,gji,jkl"
let strings = string.components(separatedBy: ",")
// strings = ["abc", "def", "gji", "jkl"] となる

Objective-C

NSString *string = @"abc,def,gji,jkl";
NSArray *strings = [string componentsSeparatedByString:@","];
// strings = (abc,def, gji, jkl) となる

文字列を「 , 」で分割し、その結果を配列でうけとることができます。
もちろん分割に使う文字は「 / 」や「 - 」でも問題ありません。

3.検索

3-1.完全一致

文字列Aと文字列Bが完全に一致しているか確認する方法です。

Swift4

var string : String = "abcdefg"
if string == "abcdefg" { // true
    print("一致")
}
else {
    print("不一致")
}

SwiftではObjectice-Cでよく使う「isEqualToString」の代わりに「==」で判定が可能です。

var string : String = "abcdefg"
let comparisonResult : ComparisonResult = string.compare("abcdefg")
if comparisonResult == .orderedSame { // true
    print("一致")
}
else {
    print("不一致")
}

「==」の他に「compare」を使用した判定方法もあります。

ObjectiveーC

NSString *string = @"abcdefg";
BOOL result = [string isEqualToString:@"abcdefg"];
if (result) { // YES
    NSLog(@"一致");
}
else {
    NSLog(@"不一致");
}
NSString *string = @"abcdefg";
NSComparisonResult comparisonResult = [string compare:@"abcdefg"];
if(comparisonResult == NSOrderedSame) { // YES
    NSLog(@"一致");
}
else {
    NSLog(@"不一致");
}

3-2.前方一致

文字列Aの先頭文字列が文字列Bと一致しているか確認する方法です。

Swift4

var string : String = "abcdefg"
let result = string.hasPrefix("abc")
if (result) { // true
    print("一致")
}
else {
    print("不一致")
}

Objective-C

NSString *string = @"abcdefg";
result = [string hasPrefix:@"abc"];
if (result) { // YES
    NSLog(@"一致");
}
else {
    NSLog(@"不一致");
}

3-3.後方一致

文字列Aの後方文字列が文字列Bと一致しているか確認する方法です。

Swift4

var string : String = "abcdefg"
let result = string.hasSuffix("efg")
if (result) { // true
    print("一致")
}
else {
    print("不一致")
}

Objective-C

NSString *string = @"abcdefg";
result = [string hasSuffix:@"efg"];
if (result) { // YES
    NSLog(@"一致");
}
else {
    NSLog(@"不一致");
}

3-4.部分一致

文字列Aの中に文字列Bが含まれているか確認する方法です。

Swift4

大文字と小文字を区別する
var string : String = "abcdefg"
if string.contains("cde") { // false
    print("一致")
}
else {
    print("不一致")
}
大文字と小文字を区別しない
var string : String = "abcdefg"
if string.lowercased().contains("cde") { // true
    print("一致")
}
else {
    print("不一致")
}

Objective-C

大文字と小文字を区別する
NSString *string = @"abCDEfg";
if ([string rangeOfString:@"cde"].location != NSNotFound) { // NO
    NSLog(@"一致");
}
else {
    NSLog(@"不一致");
}
大文字と小文字を区別しない
NSString *string = @"abCDEfg";
if ([string rangeOfString:@"cde" options:NSCaseInsensitiveSearch].location != NSNotFound) { // YES
    NSLog(@"一致");
}
else {
    NSLog(@"不一致");
}