代码之家  ›  专栏  ›  技术社区  ›  Xetius

如何检查nsstring是否以某个字符开头

  •  206
  • Xetius  · 技术社区  · 15 年前

    如何检查nsstring是否以某个字符(字符*)开头?

    *是单元格类型的指示器,因此我需要不带*的nsstring的内容,但需要知道*是否存在。

    10 回复  |  直到 9 年前
        1
  •  443
  •   Rob Keniger    9 年前

    您可以使用 -hasPrefix: 方法 NSString :

    目标C:

    NSString* output = nil;
    if([string hasPrefix:@"*"]) {
        output = [string substringFromIndex:1];
    }
    

    Swift:

    var output:String?
    if string.hasPrefix("*") {
        output = string.substringFromIndex(string.startIndex.advancedBy(1))
    }
    
        2
  •  12
  •   Tyilo    12 年前

    您可以使用:

    NSString *newString;
    if ( [[myString characterAtIndex:0] isEqualToString:@"*"] ) {
         newString = [myString substringFromIndex:1];
    }
    
        3
  •  8
  •   Manlio    13 年前

    hasPrefix 效果特别好。 例如,如果您在 NSString ,您将使用 componentsSeparatedByString 创建一个 NSArray 并使用 hasPrefix 查找以HTTP开头的元素。

    NSArray *allStringsArray = 
       [myStringThatHasHttpUrls componentsSeparatedByString:@" "]
    
    for (id myArrayElement in allStringsArray) {
        NSString *theString = [myArrayElement description];
        if ([theString hasPrefix:@"http"]) {
            NSLog(@"The URL  is %@", [myArrayElement description]);
        }
    
    }
    

    hasPrefix 返回一个布尔值,该值指示给定字符串是否与接收器的起始字符匹配。

    - (BOOL)hasPrefix:(NSString *)aString, 
    

    参数 aString 是您要查找的字符串 如果astring与接收器的起始字符匹配,则返回值为yes,否则返回no。如果 收敛 是空的。

        4
  •  4
  •   outis    15 年前

    使用 characterAtIndex: . 如果第一个字符是星号,请使用 substringFromIndex: 获取字符串sans“*”。

        5
  •  4
  •   Chuck    15 年前
    NSString *stringWithoutAsterisk(NSString *string) {
        NSRange asterisk = [string rangeOfString:@"*"];
        return asterisk.location == 0 ? [string substringFromIndex:1] : string;
    }
    
        6
  •  4
  •   Zar E Ahmer    10 年前

    另一种方法……

    希望它能帮助别人…

    if ([[temp substringToIndex:4] isEqualToString:@"http"]) {
      //starts with http
    }
    
        7
  •  3
  •   Kyle Clegg    12 年前

    作为一个更一般的答案,尝试使用hasPrefix方法。例如,下面的代码检查字符串是否以10开头,这是用于标识特定问题的错误代码。

    NSString* myString = @"10:Username taken";
    
    if([myString hasPrefix:@"10"]) {
          //display more elegant error message
    }
    
        8
  •  1
  •   djhworld    15 年前
        9
  •  0
  •   App Dev Guy    10 年前

    我偶然发现了这段代码,我还没有在堆栈上看到它的建议。它只在需要删除或更改的字符存在时才起作用,这在许多情况下都很方便。如果字符不存在,它将不会更改nsstring:

    NSString = [yourString stringByReplacingOccurrencesOfString:@"YOUR CHARACTERS YOU WANT TO REMOVE" withString:@"CAN either be EMPTY or WITH TEXT REPLACEMENT"];
    

    我就是这样使用它的:

    //declare what to look for
    NSString * suffixTorRemove = @"</p>";
    NSString * prefixToRemove = @"<p>";
    NSString * randomCharacter = @"</strong>";
    NSString * moreRandom = @"<strong>";
    NSString * makeAndSign = @"&";
    
    //I AM INSERTING A VALUE FROM A DATABASE AND HAVE ASSIGNED IT TO returnStr
    returnStr = [returnStr stringByReplacingOccurrencesOfString:suffixTorRemove withString:@""];
    returnStr = [returnStr stringByReplacingOccurrencesOfString:prefixToRemove withString:@""];
    returnStr = [returnStr stringByReplacingOccurrencesOfString:randomCharacter withString:@""];
    returnStr = [returnStr stringByReplacingOccurrencesOfString:moreRandom withString:@""];
    returnStr = [returnStr stringByReplacingOccurrencesOfString:makeAndSign withString:@"&"];
    
    //check the output
    NSLog(@"returnStr IS NOW: %@", returnStr);
    

    这一行非常容易在一行中执行三个操作:

    1. 检查字符串中不需要的字符
    2. 可以用你喜欢的任何东西代替它们
    3. 不影响周围代码
        10
  •  0
  •   iGatiTech    9 年前
    NSString* expectedString = nil;
    if([givenString hasPrefix:@"*"])
    {
       expectedString = [givenString substringFromIndex:1];
    }