【问题标题】:search string starts and ends with in a multiple occurance of same string搜索字符串以多次出现的相同字符串开始和结束
【发布时间】:2013-04-15 07:16:29
【问题描述】:

我申请了同样的问题,但我没有得到答案,我尝试了 2 天我没有得到它,任何人都可以帮助我。

我只需要查找并打印以“&”开头和结尾的字符串。但在我的字符串中很多相同的“&”出现

前:

&abc;123:342:431:234& &xyz;232:2344:433:434& &pqr;234:453:534:3445&

我只想打印以“&xyz”开头然后以“&”结尾的字符串 (&xyz;232:2344:433:434&)

总有一天我会得到
&pqr;234:453:534:3445& &abc;123:342:431:234& &xyz;232:2344:433:434&

这里我也想打印相同的“&xyz”并以“&”结尾。

我试过了,“NSRange”,“NSscanner”,“NSpredictive”。但我不知道具体的字符串是 ptrit

// NSScanner :

    NSMutableArray *substrings = [NSMutableArray new];
    NSScanner *scanner = [NSScanner scannerWithString:s];
    [scanner scanUpToString:@"&abc" intoString:nil]; //
    NSString *substring = nil;
    [scanner scanString:@"&abc" intoString:nil]; // Scan the # character
    if([scanner scanUpToString:@"&" intoString:&substring]) {
       // If the space immediately followed the &, this will be skipped
       [substrings addObject:substring];
       NSLog(@"substring is :%@",substring);
    }
    // do something with substrings
    [substrings release];


// NSpredictive :

NSString *new=@"&abc;123:342:431:234& &xyz;232:2344:433:434& &pqr;234:453:534:3445&";

NSArray *arr = [new ComponentsSepetratedByString @:" "];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self BEGINSWITH[cd] %@ AND self ENDSWITH[cd] %@",@"&abc",@"&"];

NSLog(@"Sorted Array %@",[arr filteredArrayUsingPredicate:predicate]);
NSArray *sortedArray = [arr filteredArrayUsingPredicate:predicate];

NSMutableArray *finalResult = [NSMutableArray arrayWithCapacity:0];
for(NSString *string in sortedArray)
{
    NSString *content = string;
    NSRange range1 = [content rangeOfString:@"&abc"];
    if(range1.length > 0)
        content = [content stringByReplacingCharactersInRange:range1 withString:@""];

    NSRange range2 = [content rangeOfString:@"&"];
    if(range2.length > 0)
        content = [content stringByReplacingCharactersInRange:range2 withString:@""];

    [finalResult addObject:content];
}

NSLog(@"%@",finalResult);

【问题讨论】:

  • 你可以尝试使用正则表达式
  • 我试过了,但我是从 (&xyz 到最后出现的 "&") 打印出来的,但我只需要打印特定的字符串
  • 我试过 NSArray *arr = [NSArray arrayWithObjects:@"&xyz;123:183:184:142&", @"&abc;134:534:435:432&", @"&qwe;323: 535:234:532&", @"& 我不在里面", @"&abc 我出去了&" ,nil]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self BEGINSWITH[cd] %@ AND self ENDSWITH[cd] %@",@"&abc",@"&"]; NSLog(@"%@",[arr filteredArrayUsingPredicate:predicate]);它给出了你想要的结果

标签: objective-c nsstring nspredicate nsrange nsscanner


【解决方案1】:

这是你要找的吗?

NSString *string = @"&abc;123:342:431:234& &xyz;232:2344:433:434& &pqr;234:453:534:3445&";

NSString *pattern = @"&xyz[^&]+&";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
                                       options:0 error:NULL];

[regex enumerateMatchesInString:string options:0 range:NSMakeRange(0, [string length])
             usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
                 NSRange range = [result range];
                 NSString *matched = [string substringWithRange:range];

                 NSLog(@"%@", matched);
             }];

输出:

&xyz;232:2344:433:434&

【讨论】:

    猜你喜欢
    • 2015-06-13
    • 2013-05-06
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2023-03-28
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多