【问题标题】:using for loops to camel case a phrase使用 for 循环来区分短语
【发布时间】:2019-01-02 18:40:52
【问题描述】:

我必须将第一个字符串的字母小写,删除空格并将短语的其余部分大写。所以我的输出应该是这样的:

这是美国 -> 这是美国

Apple macbook -> appleMacbook

supercalifragalisticexpialidocious -> 保持不变

我能够删除空格并将字母大写,然后使用 for 循环获取索引 0 并尝试将其小写,但它似乎不起作用。我的代码如下:

#import "CaseMaker.h"

@implementation CaseMaker
- (instancetype)initWithString:(NSString *)string{
    self = [super init];
    if (self) {
        self.camelString = string;
    }
    return self;
}

-(NSString *)process {
    NSString * output = [[NSString alloc] init];


    for (int i = 0; [_camelString length]; i++) {
        NSString *iChar = [NSString stringWithFormat:@"%c", [_camelString characterAtIndex:0]];
        [[iChar lowercaseString] characterAtIndex:0];
    }
    output = [[_camelString capitalizedString] stringByReplacingOccurrencesOfString:@" " withString:@""];

return output;

}

@end

我们将不胜感激!

【问题讨论】:

    标签: objective-c loops nsstring


    【解决方案1】:
    • 创建一个可变数组。
    • 通过用空格字符分隔项目来构成输入字符串的数组。
    • 如果字符串中没有空格,则返回小写字符串。
    • 将第一项设为小写并将其添加到输出数组中。
    • 迭代从索引 1 开始的组件,将所有对象大写并将它们添加到输出数组中。
    • 最后以空字符串加入数组并返回结果。

    -(NSString *)process {
        NSMutableArray<NSString *> * output = [NSMutableArray array];
        NSArray<NSString *> *components = [camelString componentsSeparatedByString:@" "];
        if (components.count < 2) { return camelString.lowercaseString; }
        [output addObject:components[0].lowercaseString];
        for (NSInteger i = 1; i < components.count; ++i) {
            [output addObject:components[i].capitalizedString];
        }
        return [output componentsJoinedByString:@""];
    }
    

    【讨论】:

    • 感谢您的回复,成功了!但是,我有点不确定 括号的用途。在这种情况下它们是做什么用的。他们是否将可变数组和数组转换为字符串?
    • 不,它是能够指定强类型集合类型的补充。例如NSArray&lt;NSString *&gt; 表示仅包含字符串的数组。没有泛型类型 components[0].lowercaseString 无法编译。
    • 是的,...表示只包含字符串的数组。 ?
    • 还有一件事,components.count
    • 如果数组包含的项少于两项,您可以跳过循环,因为只有一个字符串没有空格。循环从 1 开始,因为索引 0 处的项目在循环之前变为小写。
    【解决方案2】:

    使用以下步骤:

    1. 使用函数componentsSeparatedByString: 在空格处分割字符串。结果是一个带有分隔单词的数组。它应该看起来像这样:

      NSArray *wordsArray = [camelString componentsSeparatedByString:@" "];

    2. 遍历数组并对每个字符串应用大写或小写,类似于您已经做的。

      [[iChar lowercaseString] characterAtIndex:0];

    3. 将数组中的字符串再次拼接成一个字符串

    我希望按照这些步骤编写代码没有问题。

    【讨论】:

      猜你喜欢
      • 2016-02-28
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 2021-10-01
      • 2017-01-16
      • 2011-12-23
      相关资源
      最近更新 更多