【问题标题】:Dynamically append and remove substring from NSString从 NSString 动态追加和删除子字符串
【发布时间】:2012-06-13 06:32:09
【问题描述】:

我正在从 NSString 中动态添加和删除子字符串 -

在特定的操作中,我正在使用(我在添加新字符串时使用逗号分隔符)-

self.selectedString = [self.selectedString length] < 1 ? newSelectedString 
                                                       : [self.selectedString stringByAppendingFormat:@",%@",newSelectedString];

删除 - 现在这个逗号在删除字符串时给我带来了问题。 目前我正在为此使用解决方案 -

self.selectedString = [self.selectedString stringByReplacingOccurrencesOfString:newSelectedString
                                                                     withString:@""];

NSRange rangeSingleComma = [self.selectedString rangeOfString:@","];
NSRange rangeDoubleComma = [self.selectedString rangeOfString:@",,"];
if (rangeSingleComma.location == [self.selectedString length] - 1) {
    self.selectedString = [self.selectedString substringToIndex:[self.selectedString length] - 1];
}
if (rangeSingleComma.location == 0) {
    self.selectedString = [self.selectedString substringFromIndex:1];
}
if (rangeDoubleComma.location != NSNotFound) {
    self.selectedString = [self.selectedString stringByReplacingOccurrencesOfString:@",,"
                                                                         withString:@","];
 }

但这是一种非常肮脏的方法,任何人都可以提出一个好的方法。

【问题讨论】:

    标签: objective-c ios xcode nsstring substring


    【解决方案1】:

    你可以这样做

    NSString *str = @"aaa,bbb,ccc";
    NSMutableArray *arr = [[str componentsSeparatedByString:@","] mutableCopy];
    
    int indexToRemove = -1;
    for (int i = 0; i < arr.count; i++) {
        NSString *string = [arr objectAtIndex:i];
        if([string isEqualToString:@"aaa"])
        {
            indexToRemove = i;
            break;
        }
    }
    
    if(indexToRemove != -1)
    {
        [arr removeObjectAtIndex:indexToRemove];
    }
    
    NSString *newString = [arr componentsJoinedByString:@","];
    

    【讨论】:

    • +1 表示好的建议,但我喜欢 Adam 的建议,所以我会采用这种方法。
    【解决方案2】:

    您需要将此逗号分隔的列表存储为字符串吗?相反,请尝试维护 NSString 的 NSArray/NSMutableArray。这使得随意添加或删除任何项目变得容易。当您需要数组的逗号分隔字符串表示时,只需执行以下操作:

     [self.selectedArray componentsJoinedByString:@","]
    

    如果您还想继续使用您的self.selectedString 属性,只需将上面的代码行放入getter 方法中即可:

     - (NSString *) selectedString {
          return [self.selectedArray componentsJoinedByString:@","]
     }
    

    【讨论】:

    • 是的。这绝对是一个更好的方法,我会用这个。谢谢!!
    猜你喜欢
    • 2021-05-30
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    相关资源
    最近更新 更多