【问题标题】:Check if NSString end with string检查 NSString 是否以字符串结尾
【发布时间】:2012-01-01 20:05:40
【问题描述】:

我想检查我的 NSString 是否以 @2x.png 结尾(不区分大小写)。我该怎么做?

我现在有这段代码,但它似乎忽略了@2x 部分。

    NSString *fileName = [_sourcePath lastPathComponent];
    [fileName stringByReplacingOccurrencesOfString:@"@2x" withString:@""];
    [fileName stringByReplacingOccurrencesOfString:@"@2X" withString:@""];
    NSLog(@"Filename: %@", fileName);

2012-01-01 21:00:55.600 NewApp[23930:707] 文件名:myfile@2x.png

【问题讨论】:

    标签: objective-c cocoa nsstring


    【解决方案1】:

    试试这样的:

    NSRange range = [fileName rangeOfString:@"@2x.png" options:NSCaseInsensitiveSearch];
    
    if ( range.location != NSNotFound &&
         range.location + range.length == [fileName length] )
    {
        NSLog(@"%@ ends with @2x.png",fileName);
    }
    

    ps。请注意,在调用rangeOfString 之前,您应该确保fileName 不是nil,因为您正在调用一个不返回id 的方法。调用nil上的方法返回nil,与NSRange类型不兼容,会导致意想不到的结果。

    【讨论】:

      【解决方案2】:

      旧线程,但它没有最新的方法来检查 如果 NSString 以字符串结尾(根据标题):

      [fileName hasSuffix:@"@2x"];
      

      或不区分大小写:

      [[fileName lowercased] hasSuffix:@"@2x"];
      

      【讨论】:

        【解决方案3】:

        你有一个 NSString,所以你不能改变字符串的内容。 stringByReplacingOccurrencesOfString 返回修改后的字符串,但不更改文件名字符串。

        你需要这样的东西:

        fileName = [fileName stringByReplacingOccurrencesOfString:@"@2x" withString:@""];
        fileName = [fileName stringByReplacingOccurrencesOfString:@"@2X" withString:@""];
        NSLog(@"Filename: %@", fileName);
        

        【讨论】:

          【解决方案4】:

          如其他答案中所述,您需要将结果重新分配给您的变量(或者,使用-mutableCopy 创建一个可变字符串并使用NSMutableString 中的替换方法)。

          要进行不区分大小写的替换,有一个相同方法的第二个实现,带有更多参数:

          fileName = [fileName stringByReplacingOccurrencesOfString:@"@2x" withString:2"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, fileName.length)];
          

          【讨论】:

            【解决方案5】:

            您需要重新分配变量,因为 NSString 是不可变的(状态不能被修改)。试试:

            NSString *fileName = [_sourcePath lastPathComponent];
            fileName = [fileName stringByReplacingOccurrencesOfString:@"2x" withString:@""];
            fileName = [fileName stringByReplacingOccurrencesOfString:@"2X" withString:@""];
            NSLog(@"Filename: %@", fileName);
            

            或者,如果您想进行内联替换,请使用 NSMutableStringreplaceOccurrencesOfString:withString:options:range,这将进行内联替换。

            【讨论】:

            • 我应该知道的。它在文档中......只是错过了它。现在与@mvds 建议一起更改。
            猜你喜欢
            • 1970-01-01
            • 2022-01-25
            • 1970-01-01
            • 1970-01-01
            • 2013-08-23
            • 1970-01-01
            • 2012-12-31
            • 1970-01-01
            相关资源
            最近更新 更多