【问题标题】:How to append a string in another string in objective c iphone如何在目标c iphone中的另一个字符串中附加一个字符串
【发布时间】:2012-12-12 05:50:26
【问题描述】:

我正在处理包含带有 jpg、png 和 gif 扩展名的图像的图像数组。我需要在扩展名之前将字符串 @"-Add" 附加到数组中的每个图像。我怎样才能实现这一点。 例如:我有一个图像 DSC004.jpg 并且我想附加字符串“-Add”,以便我的图像名称变为 DSC004-Add.jpg.?????

我想删除扩展名,附加所需的字符串,然后再次附加扩展名。但是我的图像数组的每个图像名称都有不同的扩展名。PLs帮助我

【问题讨论】:

  • 你好 Sujay..如果你确定你的图片文件只包含一个 '.'然后使用许多人建议的任何其他解决方案,但如果您的图像名称可能有多个“。”然后使用 rmady 的解决方案。

标签: ios objective-c cocoa-touch


【解决方案1】:

最完整和通用的方法,但不是最简单的,是这样的:

NSString *filename = @"DSC004.jpg";
NSString *ext = [filename pathExtension];
NSString *basename = [filename stringByDeletingPathExtension];
NSString *updated = [basename stringByAppendingString:@"-Add"];
NSString *finalName = [updated stringByAppendingPathExtension:ext];

此方法适用于完整路径名或文件名以及名称中包含多个句点的文件。

【讨论】:

    【解决方案2】:
    NSString *str = @"ajdgl.jpg";
    NSArray *arr = [str componentsSeparatedByString:@"."];
    NSString *newStr  = [NSString stringWithFormat:@"%@-add%@",[arr objectAtIndex:0],[arr objectAtIndex:1]];
    

    【讨论】:

    • 如果名字没有句号,这段代码会崩溃。如果有多个句点,则会给出错误的结果。
    【解决方案3】:
      NSString *str = @"ajdgl.jpg";
            NSArray *array = [str componentsSeparatedByString:@"."];
            NSString *newStr;
            for (int i=0; i<[array count]-1; i++) {
                newStr = [NSString stringWithFormat:@"%@.%@",newStr,[array objectAtIndex:i]];
            }
            NSString *UpdatedName  = [NSString stringWithFormat:@"%@-add.%@",newStr,[array objectAtIndex:[array count]-1]];
    

    首先它将连接所有先前的字符串和点(。)也.. 这将带有任意数量的点。在您的图像名称之间..

    【讨论】:

      【解决方案4】:
      NSString *newString = [@"DSC004.jpg" stringByReplacingOccurrencesOfString:@"." withString:@"-Add."];
      

      【讨论】:

        【解决方案5】:
        NSString *original=@"DSC004.jpg";
        
        NSString *target=[original stringByReplacingOccurrencesOfString:@"'.'" withString:@"-Add."];
        

        试试这个,让我认识我的朋友..

        编码愉快!!1

        【讨论】:

          【解决方案6】:

          如果您的文件名类似于 some.jpg,您可以使用以下代码:

          NSString *newString = [@"DSC004.jpg" stringByReplacingOccurrencesOfString:@"." withString:@"-Add."];
          

          如果是 some.some.jpg 使用:

          NSArray *arrayString = [fileName componentsSeparatedByString:@"."];
          NSMutableArray *mutableArray = [NSMutableArray arrayWithArray: arrayString];
          int arrayCount = [arrayString count];
          NSString *newStr = nil;
          if(arrayCount>=2)
          {
            NSString *tempStr = [arrayString objectAtIndex:arrayCount-2];
            tempStr = [tempStr stringByAppendingString:@"-Add"];  
            [mutableArray replaceObjectAtIndex:arrayCount-2 withObject:tempStr];
            newStr = [mutableArray componentsJoinedByString:@"."];
            NSLog(@"%@",newStr);
          
          }
          else
          {
            newStr = [fileName stringByAppendingString:@"-Add"];
          }
          

          【讨论】:

          • 你不使用mutableArray。你引用了不存在的tempArray。您不处理文件名没有扩展名的情况。您在 arrayString 上调用 replaceObjectAtIndex:withObject:,这是不可变的。这段代码不会编译,如果编译了,它会崩溃。
          • @rmaddy:感谢您的通知。我修好了它。如果没有扩展则不会进入 if 条件
          • 如果没有扩展名,这会将newStr 保留为nil。这不好。
          • 好的,这看起来现在可以工作了。但老实说,你更愿意使用哪种代码来完成这项任务——你的还是我的? :)
          【解决方案7】:

          你也可以选择这个:

          NSError *error= NULL;  
          NSString *myString = @"DSC004.jpg";
          NSMutableString *tempStr =[[NSMutableString alloc] initWithString:myString];
          NSRegularExpression *regex =[NSRegularExpression regularExpressionWithPattern:@"(\\..{3})$" options:NSMatchingReportCompletion error:&error];
          [regex replaceMatchesInString:tempStr options:NSMatchingReportCompletion range:NSMakeRange(0,[myString length]) withTemplate:@"-Add$0"];
          
          NSLog(@"%@",tempStr);
          

          这里正则表达式引擎查找模式&lt;dot&gt; followed by three characters 并将其保存在$0 中,然后将其替换为-Add followed by saved value(match) in $0

          希望它也有帮助!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-05-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多