【问题标题】:how to remove a word from a string如何从字符串中删除一个单词
【发布时间】:2012-05-23 06:04:19
【问题描述】:

你好,我是 Objective-c 的初学者 我有一个这样的 nsstring

Select *  from Store_Master where AND  VDivison = 'Casual Dining' AND VBrand_Name = 'Pinkberry' AND VCountry_Name = 'Egypt' AND VCity = 'Cairo' AND VBuilding_mall_name = 'Dandy Mega Mall' GROUP BY VStore_Name

我只想删除第一次出现的 AND,我该如何删除。

提前谢谢你

【问题讨论】:

    标签: iphone ios nsstring


    【解决方案1】:

    使用stringByReplacingCharactersInRange 仅替换第一个“AND”:

    NSString* s = @"Select *  from Store_Master where AND  VDivison = 'Casual Dining' AND VBrand_Name = 'Pinkberry' AND VCountry_Name = 'Egypt' AND VCity = 'Cairo' AND VBuilding_mall_name = 'Dandy Mega Mall' GROUP BY VStore_Name";
    NSRange replaceRange = [s rangeOfString:@"AND"];
    if (replaceRange.location != NSNotFound){
        NSString* result = [s stringByReplacingCharactersInRange:replaceRange withString:@""];
    }
    

    这将导致:

    Select *  from Store_Master where   VDivison = 'Casual Dining' AND VBrand_Name = 'Pinkberry' AND VCountry_Name = 'Egypt' AND VCity = 'Cairo' AND VBuilding_mall_name = 'Dandy Mega Mall' GROUP BY VStore_Name
    

    已编辑:

    如果您想以不区分大小写的方式删除出现的AND(无论是大写还是小写),请在创建 NSRange 时使用NSStringCompareOptions,如下所示:

    NSRange replaceRange = [s rangeOfString:@"and" options:NSCaseInsensitiveSearch];
    

    其余代码相同。

    【讨论】:

    • 我已经编辑了我的答案以避免 NSRangeException,我假设要替换的字符串和令牌都是众所周知的,谢谢@Nit
    • 感谢您使用上面的字符串,但如果字符串会像这样改变---"选择 v1.VEmployee_Number, v1.VEmployee_Name,v1.VJob_Title,v1.VCountry_Name,v1.VLocation_Type,v4.VCity ,(当 (v1.VLocation_Type = 'HO') 然后 v1.VBr_Name ELSE v1.VDivision 结束)作为 Data_Br_Divison 来自 Store_User 作为 v1,Store_Master 作为 v4 并且 v1.VBrand_Name = 'Bhs' 和 v1.VCountry_Name = 'Kuwait' GROUP BY v1.VEmployee_Name" 然后它没有删除..
    • 您应该在创建NSRange 时使用NSStringCompareOptions,将其设置为不区分大小写。你应该这样做NSRange replaceRange = [s rangeOfString:@"and" options:NSCaseInsensitiveSearch];
    • @kamlesh 请告诉我这是否有效,如果解决了问题,请将答案标记为正确,以便其他人更容易找到它
    • 它仍然无法使用上述字符串。我后来给你的
    【解决方案2】:
    NSString *s = @"your string";
    NSInteger loc = [s rangeOfString: @"AND"].location;
    if (loc != NSNotFound) s = [NSString stringWithFormat: @"%@%@", [s substringToIndex: loc], [s substringFromIndex: loc + 3]];
    

    这将删除第一次出现的 AND。第二行查找第一次出现的位置。第三行获取前后的子字符串,并使用stringWithFormat将它们放在一起。

    获取位置后,还有其他方法可以将其删除,例如使用stringByReplacingCharactersInRange 给定范围的查找-替换,或者像我的示例一样使用stringByAppendingString 连接部分。

    【讨论】:

    • 感谢您的回答,但以下字符串不起作用我不知道为什么“选择 v1.VEmployee_Number, v1.VEmployee_Name,v1.VJob_Title,v1.VCountry_Name,v1.VLocation_Type,v4.VCity,(cas‌ ​e when (v1.VLocation_Type = 'HO') then v1.VBr_Name ELSE v1.VDivision end) as Data_Br_Divison from Store_User as v1,Store_Master as v4 where and v1.VBrand_Name = 'Bhs' and v1.VCountry_Name = 'Kuwait' GROUP BY v1.VEmployee_Name"
    【解决方案3】:
    NSString *String1 = @"Select *  from Store_Master where AND  VDivison = 'Casual Dining' AND VBrand_Name = 'Pinkberry' AND VCountry_Name = 'Egypt' AND VCity = 'Cairo' AND VBuilding_mall_name = 'Dandy Mega Mall' GROUP BY VStore_Name";
    NSString *String2 = [String1 stringByReplacingOccurrencesOfString:@"AND" withString:@""];
    
    
    
    NSString * aString  = @"Select *  from Store_Master where AND  VDivison = 'Casual Dining' AND VBrand_Name = 'Pinkberry' AND VCountry_Name = 'Egypt' AND VCity = 'Cairo' AND VBuilding_mall_name = 'Dandy Mega Mall' GROUP BY VStore_Name";
    NSRange replaceRange = [aString rangeOfString:@"AND"];
    if (replaceRange.location !=NSNotFound){
        NSString * newString = [aString stringByReplacingCharactersInRange:replaceRange withString:@""];
        NSLog(newString);
    }
    

    【讨论】:

    • 这将替换所有出现的“AND”,而不仅仅是他想要的第一个。
    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 2011-10-12
    • 2022-01-16
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    相关资源
    最近更新 更多