如何从 objective c 中的动态字符串中提取子字符串?
How to extract a substring from a dynamic string in objective c?
我有一个像 @"Greetings from Capt. Ashim Mittra, Vice President – Flight Operations"
这样的字符串,我想从中提取“Capt.阿希姆·密特拉”。即我想从“from”开始读到“,”(逗号)
使用此代码:
NSString * yourStr = @"Greetings from Capt. Ashim Mittra, Vice President – Flight Operations";
NSRange range1 = [yourStr rangeOfString:@"from"];
NSRange range2 = [yourStr rangeOfString:@","];
NSRange rangeSubString = NSMakeRange(range1.location + range1.length, range2.location - range1.location - range1.length);
NSString *finalString = [yourStr substringWithRange: rangeSubString];
要加粗使用这个;
NSMutableAttributedString * yourAttributedString = [[NSMutableAttributedString alloc] initWithString: finalString];
[yourAttributedString addAttribute: NSFontAttributeName value:[UIFont boldSystemFontOfSize:12] range:NSMakeRange(0,finalString)];
[yourLbl setAttributedText: yourAttributedString];
你可以这样做,
NSString *str = @"Greetings from Capt. Ashim Mittra, Vice President – Flight Operations";
NSRange range1 = [str rangeOfString:@"from"];
NSRange range2 = [str rangeOfString:@","];
NSRange rangeToSubString = NSMakeRange(range1.location + range1.length, range2.location - range1.location - range1.length);
NSString *resultStr = [str substringWithRange:rangeToSubString];
NSLog(@"path1 : %@",resultStr);
您可以为您的标签设置属性文本,或者当您想要显示带有粗体部分的文本时,例如,
UIFont *font = [UIFont boldSystemFontOfSize:17.0]; // whatever size, can use diiferent font with different method
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName, nil];
NSMutableAttributedString *resultStrWithBold = [[NSMutableAttributedString alloc]initWithString:str];
[resultStrWithBold setAttributes:dict range:rangeToSubString];
yourLabel.attributedText = resultStrWithBold;
您可以使用正则表达式来查找名称 - 这是一个示例:
NSString *yourString = @"Greetings from Capt. Ashim Mittra, Vice President – Flight Operations";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"from\s+([^,]+)"
options:NSRegularExpressionCaseInsensitive error:&error];
[regex enumerateMatchesInString:yourString
options:0
range:NSMakeRange(0, [yourString length])
usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
NSString *name = [yourString substringWithRange:[match rangeAtIndex:1]];
NSLog(@"%@",name);
}];
这可能需要改进很多,但您需要检查所有输入数据以做出正确的调整。它会在输入字符串中找到几个名字。
您可以使用以下代码:
- (void)viewDidLoad {
[super viewDidLoad];
NSString *str = @"Greetings from Capt. Ashim Mittra , Vice President – Flight Operations";
NSString *fromString = @"from";
NSString *toString = @",";
NSArray *seperatorArr = [[NSArray alloc] initWithObjects:fromString, toString, nil];
NSString *reqStr = [self extractSubstringFrom:str seperatedBy:seperatorArr];
}
- (NSString *)extractSubstringFrom:(NSString *)string seperatedBy:(NSArray *)seperatorArray {
NSString *resultingString = string;
for (int i = 0; i < seperatorArray.count; i++) {
NSArray *newStrArr = [resultingString componentsSeparatedByString:[seperatorArray objectAtIndex:i]];
if (i == seperatorArray.count - 1) {
resultingString = [newStrArr firstObject];
}
else
resultingString = [newStrArr lastObject];
}
NSLog(@"Resulting String = %@",resultingString);
return resultingString;
}
我有一个像 @"Greetings from Capt. Ashim Mittra, Vice President – Flight Operations"
这样的字符串,我想从中提取“Capt.阿希姆·密特拉”。即我想从“from”开始读到“,”(逗号)
使用此代码:
NSString * yourStr = @"Greetings from Capt. Ashim Mittra, Vice President – Flight Operations";
NSRange range1 = [yourStr rangeOfString:@"from"];
NSRange range2 = [yourStr rangeOfString:@","];
NSRange rangeSubString = NSMakeRange(range1.location + range1.length, range2.location - range1.location - range1.length);
NSString *finalString = [yourStr substringWithRange: rangeSubString];
要加粗使用这个;
NSMutableAttributedString * yourAttributedString = [[NSMutableAttributedString alloc] initWithString: finalString];
[yourAttributedString addAttribute: NSFontAttributeName value:[UIFont boldSystemFontOfSize:12] range:NSMakeRange(0,finalString)];
[yourLbl setAttributedText: yourAttributedString];
你可以这样做,
NSString *str = @"Greetings from Capt. Ashim Mittra, Vice President – Flight Operations";
NSRange range1 = [str rangeOfString:@"from"];
NSRange range2 = [str rangeOfString:@","];
NSRange rangeToSubString = NSMakeRange(range1.location + range1.length, range2.location - range1.location - range1.length);
NSString *resultStr = [str substringWithRange:rangeToSubString];
NSLog(@"path1 : %@",resultStr);
您可以为您的标签设置属性文本,或者当您想要显示带有粗体部分的文本时,例如,
UIFont *font = [UIFont boldSystemFontOfSize:17.0]; // whatever size, can use diiferent font with different method
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName, nil];
NSMutableAttributedString *resultStrWithBold = [[NSMutableAttributedString alloc]initWithString:str];
[resultStrWithBold setAttributes:dict range:rangeToSubString];
yourLabel.attributedText = resultStrWithBold;
您可以使用正则表达式来查找名称 - 这是一个示例:
NSString *yourString = @"Greetings from Capt. Ashim Mittra, Vice President – Flight Operations";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"from\s+([^,]+)"
options:NSRegularExpressionCaseInsensitive error:&error];
[regex enumerateMatchesInString:yourString
options:0
range:NSMakeRange(0, [yourString length])
usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
NSString *name = [yourString substringWithRange:[match rangeAtIndex:1]];
NSLog(@"%@",name);
}];
这可能需要改进很多,但您需要检查所有输入数据以做出正确的调整。它会在输入字符串中找到几个名字。
您可以使用以下代码:
- (void)viewDidLoad {
[super viewDidLoad];
NSString *str = @"Greetings from Capt. Ashim Mittra , Vice President – Flight Operations";
NSString *fromString = @"from";
NSString *toString = @",";
NSArray *seperatorArr = [[NSArray alloc] initWithObjects:fromString, toString, nil];
NSString *reqStr = [self extractSubstringFrom:str seperatedBy:seperatorArr];
}
- (NSString *)extractSubstringFrom:(NSString *)string seperatedBy:(NSArray *)seperatorArray {
NSString *resultingString = string;
for (int i = 0; i < seperatorArray.count; i++) {
NSArray *newStrArr = [resultingString componentsSeparatedByString:[seperatorArray objectAtIndex:i]];
if (i == seperatorArray.count - 1) {
resultingString = [newStrArr firstObject];
}
else
resultingString = [newStrArr lastObject];
}
NSLog(@"Resulting String = %@",resultingString);
return resultingString;
}