【Swift4】文字列(NSString)の置換・分割・検索(完全一致、前方一致、後方一致、部分一致)まとめ【Objective-C】
文字列の置換・分割・検索(完全一致、前方一致、後方一致、部分一致)の方法をまとめました。
文字列操作は色々できることがあるので覚えておくと便利だと思います。
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(@"不一致");
}