一、字符串基础
在进行字符串分割之前,需要了解字符串的基础知识。
在 iOS 中,字符串是 NSString 类的实例,它是一个不可变的 Unicode 字符序列。可以使用以下方式来创建字符串:
NSString *str1 = @"Hello, World!"; // 直接赋值 NSString *str2 = [NSString stringWithString:@"Hello, World!"]; // 使用类方法 NSString *str3 = [[NSString alloc] initWithFormat:@"Hello, %@", @"World!"]; // 格式化
字符串中的每一个字符都有一个对应的 Unicode 码点,可以使用 length 属性来获取字符串长度,使用 characterAtIndex: 方法来获取指定位置的字符:
NSString *str = @"Hello, World!"; NSUInteger len = [str length]; // 字符串长度 unichar ch = [str characterAtIndex:0]; // 获取第一个字符'H'的Unicode码点 NSLog(@"len = %lu, ch = %u", len, ch); // 输出:len = 13, ch = 72
此外,NSString 还提供了一些常用的字符串操作方法,如查找子串、替换子串、格式化输出等。详情可以参考官方文档。
二、常见字符串分割方法
1. 使用 componentsSeparatedByString: 方法
componentsSeparatedByString: 方法是 NSString 类的实例方法,它接受一个字符串作为参数,将原字符串按照参数字符串进行分割,返回分割后的字符串数组。
NSString *str = @"apple,banana,orange"; NSArray *arr = [str componentsSeparatedByString:@","]; NSLog(@"%@", arr); // 输出:[apple, banana, orange]
该方法是最常用的字符串分割方法之一,它可以方便快速地将字符串按照某个分隔符分割成多段字符串。
2. 使用 enumerateSubstringsInRange:options:usingBlock: 方法
enumerateSubstringsInRange:options:usingBlock: 方法是 NSString 类的另一个实例方法,它可以枚举指定范围内的所有子串。
NSString *str = @"apple,banana,orange";
[str enumerateSubstringsInRange:NSMakeRange(0, str.length)
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString * _Nullable substring,
NSRange substringRange,
NSRange enclosingRange, BOOL * _Nonnull stop) {
NSLog(@"%@", substring);
}];
// 输出:
// a
// p
// p
// l
// e
// ,
// b
// a
// n
// a
// n
// a
// ,
// o
// r
// a
// n
// g
// e
该方法可以灵活地控制子串的范围和方式,但是相对于 componentsSeparatedByString: 方法,它的代码量较大,可读性较差,应根据实际情况选择使用。
3. 使用 NSScanner 类
NSScanner 类是 Foundation 框架提供的一个轻量级的扫描器,它可以将字符串分割成多个子串,每个子串之间可以用自定义的分隔符或者定界符进行分割。
NSString *str = @"apple:banana:orange";
NSScanner *scanner = [NSScanner scannerWithString:str];
[scanner setCharactersToBeSkipped:nil]; // 设置跳过任意字符
NSString *subStr;
while ([scanner scanUpToString:@":" intoString:&subStr]) {
NSLog(@"%@", subStr);
[scanner scanString:@":" intoString:nil]; // 跳过分隔符
}
// 输出:
// apple
// banana
// orange
NSScanner 类的使用相对比较繁琐,但是它可以实现更加复杂的字符串解析和处理。
三、面试常见题目
1. 如何判断字符串是否只包含数字
可以使用 NSScanner 类或者正则表达式来判断字符串是否只包含数字。
// 使用 NSScanner 类
NSString *str = @"12345";
NSScanner *scanner = [NSScanner scannerWithString:str];
BOOL isNumber = [scanner scanInteger:NULL] && [scanner isAtEnd];
NSLog(@"isNumber = %d", isNumber); // 输出:isNumber = 1
// 使用正则表达式
NSString *str = @"12345";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^[0-9]+$"
options:0
error:NULL];
NSUInteger numMatches = [regex numberOfMatchesInString:str options:0 range:NSMakeRange(0, str.length)];
NSLog(@"isNumber = %d", (numMatches > 0)); // 输出:isNumber = 1
2. 如何将字符串转化为数组,并去除重复项
可以使用 componentsSeparatedByString: 方法将字符串转化为数组,使用 NSSet 类型去除重复项,最后再将 NSSet 转换为数组。
NSString *str = @"apple,banana,orange,apple"; NSArray *arr1 = [str componentsSeparatedByString:@","]; NSSet *set = [NSSet setWithArray:arr1]; NSArray *arr2 = [set allObjects]; NSLog(@"%@", arr2); // 输出:[apple, banana, orange]
3. 如何将字符串按照单词进行反转
可以先将字符串按照空格进行分割,得到单词数组,然后将数组进行反转,最后再将数组合并成一个字符串。
NSString *str = @"Hello, World!"; NSArray *arr1 = [str componentsSeparatedByString:@" "]; NSArray *arr2 = [[arr1 reverseObjectEnumerator] allObjects]; NSString *str2 = [arr2 componentsJoinedByString:@" "]; NSLog(@"%@", str2); // 输出:World! Hello,
四、总结
本文从字符串基础、常见字符串分割方法、面试常见题目三个方面对 iOS 字符串分割进行了深入研究。在实际开发中,应根据实际情况选择合适的字符串分割方法,并结合其他字符串操作方法进行处理。
原创文章,作者:PNJF,如若转载,请注明出处:https://www.506064.com/n/133682.html
微信扫一扫
支付宝扫一扫