2013-02-12 66 views
5

我希望能夠使用空格對齊字符串。我必須能夠使用stringWithFormat:方法。如何正確使用stringWithFormat填充字符串

到目前爲止,我已嘗試推薦的格式,它似乎並沒有工作:[NSString stringWithFormat:@"%[email protected]",@"test"]

我希望這會返回一個字符串,其中有六個空格後跟「測試」,但我所得到的是「測試」,沒有空格。

+0

對於正確*填充*我通常只追加一長串空白,然後截斷到所需的長度。對於右對齊*你可以做類似的事情,只能從另一端截斷。 – 2013-02-12 02:08:32

回答

4

看起來stringWithFormat忽略了%@格式說明符的大小請求。然而,%s符正常工作:

NSString *test = @"test"; 
NSString *str = [NSString stringWithFormat:@"%10s", [test cStringUsingEncoding:NSASCIIStringEncoding]]; 
NSLog(@"'%@'", str); 

這將打印' test'

+2

因爲'NSString'可以包含任何Unicode字符,所以最好使用'[test UTF8String]'而不是轉換爲ASCII。 – rmaddy 2013-02-12 01:14:21

+0

這對我有用。有關爲什麼它不適用於'%@'的任何想法? – zachzurn 2013-02-12 01:20:52

+1

@zachzurn蘋果執行'%@'格式說明符不符合IEEE規範中'%s'的標準修飾符是令人遺憾的。儘管這是一個簡單的解決方法。當然,更適合任何對象的一般解決方案是使用'[[someObject description] UTF8String]'。 – rmaddy 2013-02-12 01:23:35

3

這是C風格格式。 %nd表示寬度是n。

檢查以下代碼。

NSLog(@"%[email protected]",[NSString stringWithFormat:@"%[email protected]",@"test"]); 
NSLog(@"%@",[NSString stringWithFormat:@"  %@",@"test"]); 
NSLog(@"%[email protected]", @"test"); 
NSLog(@"%10s", [@"test" cStringUsingEncoding:[NSString defaultCStringEncoding]]); 
NSLog(@"%10d", 1); 

NSString *str = @"test"; 
int padding = 10-[str length]; //6 
if (padding > 0) 
{ 
    NSString *pad = [[NSString string] stringByPaddingToLength:padding withString:@" " startingAtIndex:0]; 
    str = [pad stringByAppendingString:str]; 
} 
NSLog(@"%@", str); 
+0

使用'%s'而不是'%@'更容易。只需使用'UTF8String'將'NSString'轉換爲C-string即可。 '%@'尊重寬度說明符。 – rmaddy 2013-02-12 01:16:07

+1

你可以用'@「」'替換'[NSString string]'。 – rmaddy 2013-02-12 01:19:00