字符串中第一个和最后一个字符的范围

时间:2013-10-16 15:42:16

标签: ios objective-c nsstring

我有一个字符串如下:

$ab$c x$yz$

该字符串始终以$开头,并以$字符结尾。我希望找到起始$和结束$的范围。

我试过了:NSRange range = [myStr rangeOfString:@"$"];

我的输出为(NSRange) $0 = location=0,因此我假设它只是返回字符串中第一个'$'的范围。

如何获得开始$和结束$?

的范围

我正在尝试做的是使用以下方法:

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

因此,当我输入'$'时,我想检查'$'是否介于'$'和'$'之间。所以我发现它使用范围。如果我输入的'$'范围在开始'$'和结束'$'的范围之间,那么就这样做,否则就这样做。

4 个答案:

答案 0 :(得分:4)

可以选择向后搜索(NSBackwardsSearch)。在这里你可以找到正确的字符串范围:

 NSRange rangeFirst = [myStr rangeOfString:@"$"],rangeLast=[myStr rangeOfString:@"$" options:NSBackwardsSearch];

答案 1 :(得分:2)

我想,你想要的是这样的功能:

-(BOOL) isRange:(NSRange)range includedIn:(NSString*)fullText {
    //Init fullTextRange
    NSRange fullTextRange = NSMakeRange(0, 0);

    if ([fullText hasPrefix:@"$"] && [fullText hasSuffix:@"$"]) {
        //We have a range of start$ and end$
        fullTextRange.length = [fullText length] - 1;
    }

    //Check if range is included in fullTextRange
    return (NSIntersectionRange(range, fullTextRange).length == range.length);
}

当文本范围介于开头'$'和结束'$'之间时,它会返回 YES

然后您应该像这样使用它:

 - (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if ([self isRange:range includedIn:searchBar.text]) {
        //Do something
    }
    else {
        //Do something else
    }
}

答案 2 :(得分:1)

如果您关心的是决定用户正在更改的文本是否包含第一个或最后一个字符(因为正如您所说,第一个和最后一个字符将始终为'$'),这很容易。< / p>

if(range.location==0)
  return NO; //first $
if(range.location + range.length == text.length - 1)
  return NO; //last $

//Do whatever in the case you want to allow the edit.

答案 3 :(得分:0)

  • NSRange rangeOfRest =第一个$到字符串结尾的NSRangeMake
  • NSRange secondDollar = [myStr rangeOfString:@“$”选项:0范围:rangeOfRest];