NSString 中有 setwidth 方法吗?

4
我想在我的字符串后添加固定宽度的空格;例如,我想以以下格式显示数据:
1   faizan   1    locked    10/20/2008
1   faizan   1    locked    10/20/2008
1   faizan   1    locked    10/20/2008
1   faizan   1    locked    10/20/2008

但这仅适用于长度相同的字符串。如果字符串不同,如下所示:
1   faizan   1    locked    10/20/2008
2   faizanali   1    locked    10/20/2008
3   ali turab gilani    1    locked    10/20/2008

如果只是这样,无法解决空格的问题。为了以相同数量的空格显示数据,我尝试了以下方法:

NSString *titleColumn = [[NSString stringWithFormat:@"%@:", title] stringByPaddingToLength:20 withString:@" " startingAtIndex:0];
serializedValue = [serializedValue stringByAppendingFormat:@"%@%@", titleColumn, value];

但这个方法也无法奏效。Objective-C中是否有类似于C ++和其他语言中的“setwidth”类型函数?

你需要显示多少个字符串? - KAREEM MAHAMMED
我想要追加5个字符串,而且有30行这种类型的字符串。 - Faizan Malik
你的stringByPaddingToLength:方法具体是怎么出问题的?这实际上是正确的做法。 - omz
2个回答

3
你是这样做的吗? /* 定义一个辅助方法 */
- (NSString *)formattedStringWithStrings:(NSArray *)strings {

    NSString *str1 = [[strings objectAtIndex:0] stringByPaddingToLength:3 withString:@" " startingAtIndex:0];
    NSString *str2 = [[strings objectAtIndex:1] stringByPaddingToLength:20 withString:@" " startingAtIndex:0];
    NSString *str3 = [[strings objectAtIndex:2] stringByPaddingToLength:3 withString:@" " startingAtIndex:0];
    NSString *str4 = [[strings objectAtIndex:3] stringByPaddingToLength:10 withString:@" " startingAtIndex:0];
    NSString *str5 = [[strings objectAtIndex:4] stringByPaddingToLength:15 withString:@" " startingAtIndex:0];
    return [NSString stringWithFormat:@"%@%@%@%@%@", str1, str2, str3, str4, str5]; 
}

/* 使用辅助方法 */

NSArray *strings = [NSArray arrayWithObjects:@"1", @"faizan", @"1", @"locked", @"10/20/2008", nil];
NSLog(@"%@", [self formattedStringWithStrings:strings]);

strings = [NSArray arrayWithObjects:@"2", @"faizanali", @"1", @"locked", @"10/20/2008", nil];
NSLog(@"%@", [self formattedStringWithStrings:strings]);

strings = [NSArray arrayWithObjects:@"3", @"ali turab gilani", @"1", @"locked", @"10/20/2008", nil];
NSLog(@"%@", [self formattedStringWithStrings:strings]);

/* 输出结果 */
1  faizan              1  locked    10/20/2008
2  faizanali           1  locked    10/20/2008
3  ali turab gilani    1  locked    10/20/2008

太酷了,这太棒了!如果这个能正常工作,我会试一下然后告诉你。但这是解决问题的绝佳方法。 - Faizan Malik
嗨,我尝试了你的例子,控制台输出很好,但当我把那段文本放入cell.textLabel.text = [RanksInfo objectAtIndex:indexPath.row]; 时,它又失去了一些空格。我该如何解决这个问题? - Faizan Malik
是的。这取决于您使用的字体。大多数字体对不同字符使用不同的宽度。尝试使用 Courier 字体,lbl.font = [UIFont fontWithName:@"CourierNewPSMT" size:16];。这将为所有字符使用相同的宽度,文本将完美对齐。 - EmptyStack

0

你需要使用 NSMutableString 来实现这个功能,逻辑如下:

  1. 检查最大长度字符串,比如 maxLength
  2. 现在运行一个 for 循环来迭代所有的字符串,并在当前字符串长度小于 maxLength 时添加 " "(空格)。
  3. 现在,你就可以得到所有字符串具有相同的长度了。

不错的逻辑,我喜欢,但那并不是解决这类问题的正确方式,如果没有内置函数来解决这个问题,就像C++中的setwidth一样。 - Faizan Malik

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