2013-02-12 49 views
0

我對不變部分(即「Bonus Score:(+ 7%)」)和變化部分(例如「247,890」)有單獨的文本對象。由於它們是分開的,我想在不變的部分留出空間來顯示數字。如何在NSString中保留一定數量的空格?

我第一次嘗試是:

NSString* numberString = @"247,890"; 
NSString* blankScore = [@"" stringByPaddingToLength:[numberString length] withString: @" " startingAtIndex:0]; 
NSString* baseDisplay = [NSString stringWithFormat:@"BONUS SCORE: %@ (+7%%)", blankScore]; 

「blankScore」是正確的長度,但由此產生的baseDisplay似乎修剪周圍哪裏blankScore將是空間,使其成爲過小的空間,用於顯示數。

接下來,我嘗試創建blankScore的另一種方式:

NSString* blankScore = [numberString stringByReplacingCharactersInRange:NSMakeRange(0, [numberString length]) withString:@" "]; 

但這返回長度爲1

我是否正確理解這些的NSString方法的blankScore?我檢查了文檔,看起來我對這些方法的理解與寫在那裏的內容是一致的,但我仍然不明白爲什麼我無法讓baseDisplay具有正確數量的空格。

+1

爲什麼不乾脆用' [NSString stringWithFormat:@「%8d」,score]'或者類似? – 2013-02-12 19:28:40

+0

我想操縱顯示的分數和baseDisplay(圖形方式),所以我不想讓實際分數成爲baseDisplay的一部分,而是試圖找到一種方法來留下一定數量的空格。 – 2013-02-12 19:50:51

+2

「這裏有一個格式說明符」...'「%* d」,numOfSpaces,score' – 2013-02-12 19:56:23

回答

0

您是否在控制檯上使用NSLog打印blankScore?實際上你的字符串是正確的,但是輸出在行結束時被修剪 - 這就是爲什麼你如前所述看到它。

+0

我真的發佈了這個之後很快就做到了,並且基於控制檯,它看起來很不錯,但是當它顯示在我的屏幕上時,它仍然會縮小,所以在將它轉換爲圖形時可能會出現問題。我是否應該回答這個問題,因爲問題可能在其他地方?我仍然對第二種方法爲什麼返回長度爲1的字符串感興趣。 – 2013-02-12 19:47:01

+0

stringByReplacingCharactersInRange返回一個新的字符串,其中接收器的指定範圍內的字符被給定的字符串替換。雖然用「」代替「247,890」,但它的長度預計爲1. – 2013-02-12 20:05:08

+0

我只是選擇了你的回答作爲答案,因爲你確認我的字符串是正確的,而且我肯定認爲問題在於我的基礎代碼是如何顯示文本。希望本頁面的其他討論將幫助別人解決問題。 – 2013-02-12 22:50:33

0

@ H2CO3是正確的解決方案。你應該使用: NSString * baseDisplay = [NSString stringWithFormat:@「BONUS SCORE:%@(+ 7 %%)」,numberString];

爲了使這項工作更好,您可能需要考慮使用NSNumberFormatter在將變化部分插入baseDisplay對象之前正確格式化變化部分。事情是這樣的:

NSNumber *changingNumber = [NSNumber numberWithDouble:247890]; 
NSNumberFormatter *correctFormat = [[NSNumberFormatter alloc] init]; 
[correctFormat setNumberStyle:NSNumberFormatterDecimalStyle]; 
[correctFormat setHasThousandSeparators:YES]; 
[correctFormat setUsesGroupingSeparator:YES]; 

NSString *numberString = [correctFormat stringFromNumber:changingNumber]; 
NSString *baseDisplay = [NSString stringWithFormat:@"BONUS SCORE: %@ (+7%%)", numberString]; 

這樣不管你在它扔什麼號碼,它會正確顯示「1234456」或「34567」,等等。

編輯:

基礎上評論我的答案,你需要使用:

stringByPaddingToLength:withString:startingAtIndex: 

它應該是這個樣子:

NSString *templateString = @"BONUS SCORE:"; 
NSString *templateString2 = @"(+7%%)"; 
NSUInteger baseStringLength = [templateString length] + [numberString length]; 
NSString *spacedString = [templateString stringByPaddingToLength:baseStringLength withString:@" " startingAtIndex:0]; 
NSString *baseDisplay = [NSString stringWithFormat:@"%@%@", spacedString, templateString2]; 
+0

您的第二個解決方案返回'1',因爲您用一個空格替換了整個字符串。 – JiuJitsuCoder 2013-02-12 19:52:55

+0

謝謝您花時間分享您的答案,但我將評分與其他文字分開的原因使我不能接受@ H2C03的建議。請參閱我在H2CO3的評論中發佈的評論。 – 2013-02-12 19:53:47

+0

我相信你在EDIT下添加的部分是不正確的。我的程序開始崩潰,然後我記得startingAtIndex:在你傳遞給string的任何字符串中的位置都有一個索引,這意味着13出現在@「」之外。 – 2013-02-12 22:36:27