NSString *str1 = [NSString stringWithFormat:@"iPhone%d", 5]; NSLog(@"str1 = %@", str1); //2 alloc+初始化方法 NSString *str2 = [[NSString alloc] initWithFormat:@"iPhone%d", 4]; NSLog(@"str2 = %@", str2); //(3) 根据字符串初始化OC字符串对象 NSString *str3 = @"lanou";//存储字符串@"lanou"的地址
NSUInteger length = [str3 length]; NSLog(@"length = %lu", length);
unichar charac = [str3 characterAtIndex:4]; NSLog(@"%c", charac); //注意:Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFConstantString characterAtIndex:]: Range or index out of bounds' //reason:问题产生的原因 .NSCFString == NSString, 又是一个-号方法, 所以问题产生的原因是:让一个NSString的类型对象, 调用characterAtIndex:方法时, 给定的下标越界了, 超出了范围 //解决方案:将数组下标修改为范围之内的数即可
//例如:判断一个字符串是否以http开头, 是否以.com结束 NSString *str4 = [[NSString alloc] initWithFormat:@"http://www.baidu.com"]; //判断是否以http开头 BOOL isPrefix = [str4 hasPrefix:@"http"]; NSLog(@"isPrefix = %d", isPrefix); BOOL isSuffix = [str4 hasSuffix:@".com"]; NSLog(@"isSuffix = %d", isSuffix);
NSRange range = [str4 rangeOfString:@"www"]; if (range.length == 0) { NSLog(@"No Found"); } else { NSLog(@"location:%lu, length:%lu", range.location, range.length); //将NSRange类型的结构体变量转变成字符串对象 NSLog(@"%@", NSStringFromRange(range)); }
//1 获取给定的下标之后的子串, 包含指定下标对应的字符 //2 获取给定的下标之前的子串, 但是不包含指定下标对应的字符 //3 获取指定范围内的子串 NSString *subString1 = [str4 substringFromIndex:7]; NSLog(@"subString1 = %@", subString1); NSString *subString2 = [str4 substringToIndex:7]; NSLog(@"subString2 = %@", subString2); NSString *subString3 = [str4 substringWithRange:NSMakeRange(7, 4)]; NSLog(@"subString3 = %@", subString3);
NSString *str5 = [NSString stringWithFormat:@"lanou"]; //lanou后拼接henan NSString *str6 = [str5 stringByAppendingString:@"henan"]; NSLog(@"str6 = %@", str6); //lanou后拼接henan9ban NSString *str7 = [str5 stringByAppendingFormat:@"%@%dban", str6, 9];//Format可以格式化输出 NSLog(@"str7 = %@", str7); //8 替换字符串 NSString *str8 = [NSString stringWithFormat:@"lanouououisbigcompany"]; //1将o替换成牛逼 //第一个参数是被替换字符串 第二个参数是替换字符串 NSString *str9 = [str8 stringByReplacingOccurrencesOfString:@"ou" withString:@"牛逼"]; NSLog(@"str9 = %@", str9); NSString *str10 = [str8 stringByReplacingCharactersInRange:NSMakeRange(3, 2) withString:@"牛逼"]; NSLog(@"str10 = %@", str10);
NSString *str11 = [NSString stringWithFormat:@"bbc"]; NSString *str12 = [NSString stringWithFormat:@"bbc"]; NSInteger result1 = [str11 compare:str12]; NSLog(@"result1 = %ld", result1); NSComparisonResult result2 = [@"311" compare:@"222"]; NSLog(@"result2 = %ld", result2);
从第一个字符开始如果在遇到除了空格之外的字符时, 将前面的空格忽略掉, 继续往下找, 读取数字, 直到遇到非数字时结束
//1 将字符串@"123"转换为整数123 NSInteger result3 = [@" 12a3as" intValue]; NSLog(@"%result3 = ld", result3); //2 将数字转为字符串对象 NSString *str13 = [NSString stringWithFormat:@"%d", 5]; NSLog(@"str13 = %@", str13);
//1 将@"lanOU"全部转为大写 uppercaseString 转为 LANOU //2 将@"lanOU"全部转为小写 lowercaseString 转为 lanou //3 将@"lanOU"首字母转为大写 capitalizedString 转为 Lanou NSString *str14 = [@"lanOU" capitalizedString]; NSLog(@"str14 = %@", str14);
- (BOOL)isPureInt:(NSString*)string{ NSScanner* scan = [NSScanner scannerWithString:string]; int val; return[scan scanInt:&val] && [scan isAtEnd]; } //判断是否为浮点形: if( ![self isPureInt:insertValue.text] || ![self isPureFloat:insertValue.text]) { resultLabel.textColor = [UIColor redColor]; resultLabel.text = @"警告:含非法字符,请输入纯数字!"; return; }
13.字符串替换:
//返回一个新的字符串 NSString *newStr = [str stringByReplacingOccurrencesOfString:@"," withString:@"|"];
14.ios禁止输入输入法表情
因为emoji编码在android或者pc设备没有很好的支持,所以有时候为了禁止emoji表情的输入,因为关闭不了系统emoji的键盘,那只能根据编码把emoji表情过滤掉,写了一个NSString的拓展,用来判断是不是emoji编码: @implementation NSString(Emoji) +(BOOL)isContainsEmoji:(NSString *)string { __block BOOL isEomji = NO; [string enumerateSubstringsInRange:NSMakeRange(0, [string length])options:NSStringEnumerationByComposedCharacterSequencesusingBlock: ^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { const unichar hs = [substring characterAtIndex:0]; // surrogate pair if (0xd800 <= hs && hs <= 0xdbff) { if (substring.length > 1) { const unichar ls = [substring characterAtIndex:1]; const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000; if (0x1d000 <= uc && uc <= 0x1f77f) { isEomji = YES; } } } else if (substring.length > 1) { const unichar ls = [substring characterAtIndex:1]; if (ls == 0x20e3) { isEomji = YES; } } else { // non surrogate if (0x2100 <= hs && hs <= 0x27ff && hs != 0x263b) { isEomji = YES; } else if (0x2B05 <= hs && hs <= 0x2b07) { isEomji = YES; } else if (0x2934 <= hs && hs <= 0x2935) { isEomji = YES; } else if (0x3297 <= hs && hs <= 0x3299) { isEomji = YES; } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs ==0x2b1b || hs == 0x2b50|| hs == 0x231a ) { isEomji = YES; } } }]; return isEomji; } 这样在textview或textfield的delegate判断一下,即可禁止输入emoji,如下: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string { //emoji无效 if([NSString isContainsEmoji:string]) { return NO; } }