【问题标题】:String matching objective-c字符串匹配objective-c
【发布时间】:2011-05-28 13:31:04
【问题描述】:

我需要这样匹配我的字符串:*myString* 其中* 表示任何子字符串。 我应该使用哪种方法?

你能帮帮我吗?

【问题讨论】:

  • @Mitch Wheat,这是“我应该使用哪种方法?” “你能帮帮我吗?”可能是一种修辞,虽然我猜你也可以回答这个问题。

标签: iphone objective-c string string-matching


【解决方案1】:

如果您需要更高级的东西,请尝试https://github.com/dblock/objc-ngram

【讨论】:

    【解决方案2】:

    您无法使用 *(通配符)进行实际搜索,但您通常可以执行等效的操作:

    相当于搜索theTerm*

    if ([theString hasPrefix:@"theTerm"]) {
    

    相当于搜索*theTerm

    if ([theString hasSuffix:@"theTerm"]) {
    

    或者,使用下图NSString上的类别,下面相当于搜索*theTerm*

    if ([theString containsString:@"theTerm"]) {
    

    类别只是我们添加到类中的一种新方法(如函数)。我写了以下一个,因为通常认为一个字符串包含另一个字符串比处理NSRanges 更有意义。

    // category on NSString
    @interface NSString (MDSearchAdditions)
    - (BOOL)containsString:(NSString *)aString;
    @end
    
    @implementation NSString (MDSearchAdditions)
    
    - (BOOL)containsString:(NSString *)aString {
      return [self rangeOfString:aString].location != NSNotFound;
    }
    
    @end
    

    【讨论】:

    • 对于 containsString 你可以做return [self rangeOfString:aString].location != NSNotFound;
    【解决方案3】:

    如果是 iPhone OS 3.2 或更高版本,请使用 NSRegularExpressionSearch。

    NSString *regEx = [NSString stringWithFormat:@".*%@.*", yourSearchString];
    NSRange range = [stringToSearch rangeOfString:regEx options:NSRegularExpressionSearch];
    if (range.location != NSNotFound) {
    
    }
    

    【讨论】:

    • 我尝试使用您的代码但它不起作用,但如果我以这种方式使用: NSRange range = [@"hello pippo" rangeOfString:@".*pi.*" 选项: NSRegularExpressionSearch];这行得通!!为什么?特别是如果我使用正则表达式来 rangeOfString id 不起作用!?!?!?!
    • 我注意到如果 textView.text 只是一个单词,它不起作用!!
    • @user536926 抱歉现在修复。
    猜你喜欢
    • 1970-01-01
    • 2014-11-19
    • 2010-09-30
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多