【问题标题】:How to pad strings to a fixed width with NSMutableString?如何使用 NSMutableString 将字符串填充到固定宽度?
【发布时间】:2013-04-11 14:12:15
【问题描述】:

我正在尝试将字符串写入文本文件。然后该文本文件将被另一个程序读取。第二个程序期望文本文件中的不同“字段”是固定宽度。因此,当我使用我的应用程序编写文本文件时,我需要在我的实际数据之间添加空格以使所有内容正确排列。如何添加这些空间?


到目前为止,我已经尝试编写一个将源字符串和目标长度作为输入的函数。如果目标比源长,它只是附加“”。该例程的代码如下:

- (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");运行多次。

【问题讨论】:

  • for(int i=0; i&lt;number; i++) {[string appendString:@" "];}
  • @AnoopVaidya:这就是我尝试过的(请参阅下面的答案)。我是不是做错了什么?
  • 不,你没有这样做:)

标签: ios objective-c nsmutablestring


【解决方案1】:

NSString 上有一个 stringByPaddingToLength:withString:startingAtIndex: 方法可以做到这一点。

【讨论】:

  • 谢谢,这实际上看起来是最好的方法。当有一些内置的东西可以做时,我编写自己的代码是没有意义的。
  • 而且这个可能比 for 循环更优化,它可以在同一个 runloop 中一个一个地添加十万个空格,直到 runloop 结束才释放任何东西......跨度>
【解决方案2】:

你在这里犯了一个愚蠢的错误

 [newString stringByAppendingString:@" "];

返回一个新字符串,它不会影响调用者对象。你需要存储它

newString=[newString stringByAppendingString:@" "];

或者干脆

[newString appendString:@" "];

【讨论】:

  • 由于newString 是可变的,你应该只使用最后一种形式。
【解决方案3】:

你想改变:

[newString stringByAppendingString:@" "];

进入:

newString = [newString stringByAppendingString:@" "];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-17
    • 2016-01-31
    • 2017-08-23
    • 2011-06-15
    • 2012-03-04
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多