【问题标题】:stringByTrimmingCharactersInSet: is not removing characters in the middle of the stringstringByTrimmingCharactersInSet:不删除字符串中间的字符
【发布时间】:2011-07-31 16:03:47
【问题描述】:

我想从我的字符串中删除“#”。

我试过了

 NSString *abc = [@"A#BCD#D" stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"#"]];

但它仍然显示字符串为“A#BCD#D”

可能出了什么问题?

【问题讨论】:

标签: objective-c string nsstring nscharacterset


【解决方案1】:

stringByTrimmingCharactersInSet 从字符串的开头和结尾删除字符,而不是从字符串中的任何位置

为了您的目的,请使用其他人指出的 stringByReplacingOccurrencesOfString:withString: 方法。

【讨论】:

  • 那为什么不叫“stringByTrimmingCharactersInSetJustFromTheVeryEndOrVeryBeginning”...
  • 我猜 trim 暗示了这一点,但我不是以英语为母语的人 :)
【解决方案2】:

你可以试试

NSString *modifiedString = [yourString stringByReplacingOccurrencesOfString:@"#" withString:@""];

【讨论】:

    【解决方案3】:

    为此我写了一个NSString的类别:

    - (NSString *)stringByReplaceCharacterSet:(NSCharacterSet *)characterset withString:(NSString *)string {
        NSString *result = self;
        NSRange range = [result rangeOfCharacterFromSet:characterset];
    
        while (range.location != NSNotFound) {
            result = [result stringByReplacingCharactersInRange:range withString:string];
            range = [result rangeOfCharacterFromSet:characterset];
        }
        return result;
    }
    

    你可以这样使用它:

    NSCharacterSet *funnyCharset = [NSCharacterSet characterSetWithCharactersInString:@"#"];
    NSString *newString = [string stringByReplaceCharacterSet:funnyCharset withString:@""];
    

    【讨论】:

    • +1,虽然我不喜欢使用while 循环造成的冗余,所以我写了一个使用递归的方法(do-while 可能也可以删除冗余):stackoverflow.com/a/26152034/901641
    【解决方案4】:

    我之前对此有一个相对复杂的递归答案(如果您想查看该答案,请参阅此答案的编辑历史记录),但后来我发现了一个非常简单的一行:

    - (NSString *)stringByRemovingCharactersInSet:(NSCharacterSet *)characterSet {
        return [[self componentsSeparatedByCharactersInSet:characterSet] componentsJoinedByString:@""];
    }
    

    【讨论】:

    • 我花了很长时间才弄清楚为什么 xcode 不接受它:) 顺便感谢您的回答。
    【解决方案5】:

    请参阅 Apple 文档:stringByReplacingOccurrencesOfString: method in NSString

    NSString *str1=[str stringByReplacingOccurrencesOfString:@"#" withString:@""];
    

    希望这会有所帮助。

    【讨论】:

      【解决方案6】:

      在下面使用

      NSString * myString = @"A#BCD#D";
      NSString * newString = [myString stringByReplacingOccurrencesOfString:@"#" withString:@""];
      

      【讨论】:

        猜你喜欢
        • 2022-11-23
        • 1970-01-01
        • 2016-06-29
        • 2015-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-29
        • 1970-01-01
        相关资源
        最近更新 更多