2013-04-11 76 views
1

我想寫一個字符串到文本文件。該文本文件將被另一個程序讀取。第二個程序期望文本文件中的不同「字段」爲固定寬度。因此,當我使用我的應用程序編寫文本文件時,我需要在我的實際數據之間添加空格以使所有內容正確排列。我如何獲得這些空間?如何使用NSMutableString將字符串填充到固定寬度?


到目前爲止,我已經嘗試寫一個函數,接受源字符串和目標長度作爲輸入。如果目標比源更長,它只會追加「」。此例程代碼如下:

- (NSString *) makeStringFrom:(NSString *)source withLength:(NSInteger)length 
{ 
    // Method to add spaces to the end of a string to get it to a certain length 
    if ([source length] > length) 
    { 
     // String is too long - throw warning and send it back 
     NSLog(@"Warning - string is already longer than length supplied. Returning source string"); 
     return source; 
    } 
    else if ([source length] == length) 
    { 
     // String is already correct length, so just send it back 
     return source; 
    } 
    else 
    { 
     // String is too short, need to add spaces 
     NSMutableString *newString = [[NSMutableString alloc] initWithString:source]; 
     NSLog(@"newString initial length = %d",[newString length]); 
     for (int current = [source length]; current < length; current ++) 
     { 
      [newString stringByAppendingString:@" "]; 
      NSLog(@"hit"); 
     } 

     NSLog(@"target length = %d. newString length = %d",length,[newString length]); 
     return newString; 
    } 
} 

這顯然不起作用。即使在NSLog(@「hit」);}時,返回的字符串的長度也不會改變所提供的字符串的長度。運行多次。

+0

'for(int i = 0; i 2013-04-11 14:14:01

+0

@AnoopVaidya:這就是我所嘗試的(請參閱下面的答案)。我做錯什麼了嗎? – GeneralMike 2013-04-11 14:16:16

+0

不,你沒有做同樣的:) – 2013-04-11 14:21:39

回答

4

有上NSString一個stringByPaddingToLength:withString:startingAtIndex:方法這只是做到了這一點。

+0

謝謝,這實際上看起來是最好的方式。當我有自己的代碼編寫自己的代碼時,沒有任何意義。 – GeneralMike 2013-04-11 14:41:13

+1

這個可能比for循環更加優化,它可以在同一個runloop中逐個添加十萬個空格,而不會釋放任何東西,直到runloop結束爲止...... – Cyrille 2013-04-11 14:42:53

1

你做了一個愚蠢的錯誤在這裏

[newString stringByAppendingString:@" "]; 

返回一個新字符串,它亙古不變的效果來電對象。你需要將它存儲

newString=[newString stringByAppendingString:@" "]; 

或者乾脆

[newString appendString:@" "]; 
+0

呃,就是這樣。謝謝。 – GeneralMike 2013-04-11 14:19:51

+1

由於'newString'是可變的,你應該只使用最後一種形式。 – rmaddy 2013-04-11 14:58:09

1

你想改變:

[newString stringByAppendingString:@" "]; 

到:

newString = [newString stringByAppendingString:@" "]; 
+0

呃,就是這樣。謝謝。 – GeneralMike 2013-04-11 14:21:09

+0

由於'newString'是可變的,所以這不是一個好的解決方案。 – rmaddy 2013-04-11 14:57:52

相關問題