如何在NSString中添加空格填充?

11
例如,我需要NSString至少有8个字符...除了使用循环在其左侧添加填充空格之外,是否有其他方法可以做到这一点?
Examples:

Input:    |Output:
Hello     |   Hello
Bye       |     Bye
Very Long |Very Long
abc       |     abc

4个回答

18

以下是一个示例,展示如何完成此操作:

int main (int argc, const char * argv[]) {
    NSString *str = @"Hello";
    int add = 8-[str length];
    if (add > 0) {
        NSString *pad = [[NSString string] stringByPaddingToLength:add withString:@" " startingAtIndex:0];
        str = [pad stringByAppendingString:str];
    }
    NSLog(@"'%@'", str);
    return 0;
}

4
你为什么要这样做?stringByPaddingToLength:withString:startingAtIndex:已经可以做到这个功能了。你可以删掉声明str之后的所有内容,改为 NSLog(@"%@", [str stringByPaddingToLength:add withString:@" " startingAtIndex:0]) - Chuck
1
@Chuck 是的,那是我的最初想法。不幸的是,我理解的填充方法只在右侧填充,覆盖从索引开始的字符。换句话说,如果你从零开始,你会得到一个由八个空格组成的字符串。 - Sergey Kalinichenko
1
啊,你说得对,我显然没有正确地阅读问题。别理我。 - Chuck
@dasblinkenlight,我最初也认为索引是用来控制的。但实际上,“startingAtIndex”是指填充字符串中填充开始的位置。请参阅[NSString类参考文档](https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/stringByPaddingToLength:withString:startingAtIndex:)。 - Maple

8
我只是做了这样的事情:
    NSLog(@"%*c%@", 14 - theString.length, ' ', theString);

此外,14是您所需的宽度。

2
这是有问题的,那到底意味着什么? - Özgür
如果长度被转换为int并且字符串theString小于14,那么这是可以的。 - Victor Engel

0

您可以使用C语言printf格式化与-[NSMutableString appendFormat:]和所有其他NSString“format”方法。它不遵循NSString(在%@上进行格式化),因此您需要将它们转换为ASCII。

C中的字符串填充

- (NSString *)sample {
    NSArray<NSString *> *input = @[@"Hello", @"Bye", @"Very Long", @"abc"];
    NSMutableString *output = [[NSMutableString alloc] init];
    for (NSString *string in input) {
        [output appendFormat:@"%8s\n", string.UTF8String];
    }
    return output;
}

/*
Return value:
   Hello
     Bye
Very Long
     abc
*/

-2

如果你需要在一个方法中得到相同的答案,我不得不为我的项目创建一个方法。原始代码由dashblinkenlight提供。

- (NSString *) LeftPadString: (NSString*) originalString LengthAfterPadding: (int)len  paddingCharacter: (char) pad
{
int add = (int) (len - originalString.length);

NSString* paddingCharString = [NSString stringWithFormat:@"%c" , pad];

if (add > 0)
{
    NSString *pad = [[NSString string] stringByPaddingToLength:add withString: paddingCharString startingAtIndex:0];
    return [pad stringByAppendingString:originalString];
}
else
    return originalString;
}

- (NSString *)stringByPaddingToLength:(NSUInteger)newLength withString:(NSString *)padString startingAtIndex:(NSUInteger)padIndex; - Alex Zavatone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接