2

我有一个字符串,如下所示:

$ab$c x$yz$

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

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

我得到了(NSRange) $0 = location=0关于它的位置的输出,所以我假设它只是返回在字符串中找到的第一个 '$' 的范围。

如何获得开始 $ 和结束 $ 的范围?

我在这里真正想做的是我正在使用以下方法:

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

因此,当我将文本键入为“$”时,我希望检查“$”是否在开始“$”和结束“$”之间。所以我正在使用范围找到它。如果我输入的 '$' 的范围在 start '$' 和 end '$' 的范围之间,则执行此操作,否则执行此操作。

4

4 回答 4

4

有一个向后搜索选项 ( NSBackwardsSearch)。在这里您可以找到正确的字符串范围:

 NSRange rangeFirst = [myStr rangeOfString:@"$"],rangeLast=[myStr rangeOfString:@"$" options:NSBackwardsSearch];
于 2013-10-17T08:11:54.743 回答
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);
}

当文本的范围在 start'$' 和 end'$' 之间时,它返回YES 。

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

 - (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if ([self isRange:range includedIn:searchBar.text]) {
        //Do something
    }
    else {
        //Do something else
    }
}
于 2013-10-16T17:21:25.063 回答
1

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

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.
于 2013-10-16T15:46:15.710 回答
0
  • NSRange rangeOfRest = NSRangeMake 表示从第一个$到字符串结尾的1
  • NSRange secondDollar = [myStr rangeOfString:@"$" options:0 range:rangeOfRest];
于 2013-10-16T20:11:44.103 回答