如何从 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;

}