【问题标题】:Is there setwidth is in NSString?NSString 中有 setwidth 吗?
【发布时间】:2012-01-20 05:38:45
【问题描述】:

我想在我的字符串后面加上固定宽度的空格;例如,我想以这种格式显示数据:

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-type 函数?

【问题讨论】:

  • 你要显示多少个字符串
  • 我想追加 5 个字符串,这种类型的字符串有 30 行
  • stringByPaddingToLength: 到底怎么不适合你?这实际上是正确的方法。

标签: iphone objective-c ios ipad nsstring


【解决方案1】:

你是这样做的吗?

/* 定义一个辅助方法 */

- (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

【讨论】:

  • coooollllll maannnnn 太棒了,如果这个工作正常,我会试试然后告诉你,但这是解决问题的好方法
  • 嗨,我试过你的例子,它对控制台输出效果很好,但是当我把文本放在 cell.textLabel.text = [RanksInfo objectAtIndex:indexPath.row];然后它又失去了一些空间我该如何解决这个问题
  • 是的。这取决于您使用的字体。大多数字体对不同的字符使用不同的宽度。尝试使用 Courier 字体,lbl.font = [UIFont fontWithName:@"CourierNewPSMT" size:16];。这对所有字符使用相同的宽度,并且文本完全对齐。
【解决方案2】:

你必须使用NSMutableString 来实现它。逻辑是:

  1. 检查最大长度字符串,比如maxLength
  2. 现在运行一个 for 循环来迭代所有字符串,如果字符串的当前长度小于 maxLength,则在字符串后面附加“”(空格)。
  3. 现在,您将得到所有长度相同的字符串。

【讨论】:

  • 不错的逻辑人喜欢它,但这不是解决此类问题的正确方法,因为没有像 c++ 中的 setwidth 那样解决此问题的内置函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 2022-10-04
  • 2014-05-11
  • 2012-08-10
  • 1970-01-01
  • 2010-10-08
相关资源
最近更新 更多