2012-12-12 84 views
2

我正在處理包含jpg,png和gif擴展名的圖像的圖像數組。我需要在之前的數組中添加一個字符串@「 - Add」延伸。我可以如何實現這一點。 對於例如:我有一個圖像DSC004.jpg,我想追加字符串「-Add」,以便我的圖像名稱變成DSC004-Add.jpg。如何在目標c中的另一個字符串追加一個字符串iphone

我想刪除擴展,附加所需的字符串,然後再附加的extension.But我的圖像陣列與每個圖像不同的擴展name.PLs幫我出

+1

hello Sujay..if你確定你的圖片文件只包含一個'。'然後使用許多人建議的任何其他解決方案,但是如果您的圖像名稱可能有多個「。」。然後使用rmady的解決方案。 –

回答

15

的最完整,最普遍的方式,但不是最簡單的,是這樣的:

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

這種方法適用於全路徑名或文件名和文件的名稱中多個句點,。

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

這會導致文件名失敗,例如'some.file.jpg'。 – rmaddy

+0

確切地說,我有圖像名稱之間的點.. – sujay

0
NSString *[email protected]"DSC004.jpg"; 

NSString *target=[original stringByReplacingOccurrencesOfString:@"'.'" withString:@"-Add."]; 

試這一點,讓我知道我的朋友。

編碼快樂!! 1

0

您可以使用下面的代碼,如果你的文件名是一樣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"]; 
} 
+0

你不使用'mutableArray'。你引用了不存在的'tempArray'。您不處理沒有擴展名的文件名的情況。你可以在'arrayString'上調用'replaceObjectAtIndex:withObject:',這是不可變的。這段代碼不會編譯,如果這樣做,它會崩潰。 – rmaddy

+0

@rmaddy:謝謝你的通知。我修好了它。如果沒有擴展名,則不會進入if條件 –

+0

如果沒有擴展名,則將'newStr'作爲'nil'離開。這不好。 – rmaddy

2
NSString *str = @"ajdgl.jpg"; 
NSArray *arr = [str componentsSeparatedByString:@"."]; 
NSString *newStr = [NSString stringWithFormat:@"%@-add%@",[arr objectAtIndex:0],[arr objectAtIndex:1]]; 
+2

如果名稱根本沒有時間,此代碼將崩潰。如果有多個期間,這會給出錯誤的結果。 – rmaddy

2
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]]; 

這裏首先它會連接所有以前的字符串和點(。)也.. 這將與任意數量的點。在圖片名稱之間..

+3

不,如果有兩個或兩個以上的時間段,這段代碼會留下部分文件名。 – rmaddy

+0

雅你是對的..但我認爲現在它會正常工作.. –

0

你可以去這一個也:

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); 

這裏正則表達式引擎查找模式<dot> followed by three characters並將其保存在$0然後用-Add followed by saved value(match) in $0

希望它可以取代它也有幫助!

相關問題