Как дополнить строки фиксированной шириной с помощью 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"); работает несколько раз.
3 ответа
Есть stringByPaddingToLength:withString:startingAtIndex:
метод на NSString
это делает только это.
Вы сделали глупую ошибку здесь
[newString stringByAppendingString:@" "];
Это возвращает новую строку, и это не влияет на объект вызывающего. Вы должны хранить это
newString=[newString stringByAppendingString:@" "];
или просто
[newString appendString:@" "];
Вы хотите изменить:
[newString stringByAppendingString:@" "];
в:
newString = [newString stringByAppendingString:@" "];