【问题标题】:How to remove some character from NSString in iPhone?如何从 iPhone 中的 NSString 中删除某些字符?
【发布时间】:2012-11-21 08:48:35
【问题描述】:
NSString *Address = [placemark.addressDictionary objectForKey:@"FormattedAddressLines"];
NSLog(@"Address:%@", Address);
Address: ("Hooker Alley","San Francisco, CA 94108",USA)

我想从地址字符串中删除一些字符,例如 Hooker Alley, San Francisco, CA 94108,USA。 怎么去掉这样的?请帮帮我

提前致谢

我试过了:

NSString *removeCharacter = [Address stringByReplacingOccurrencesOfString:@"(" withString:@""];

但错误出现在 First throw 调用堆栈中:

错误信息是,

-[__NSArrayM stringByReplacingOccurrencesOfString:withString:]: unrecognized selector sent to instance 0x81afd00 

【问题讨论】:

  • 确切的错误是什么?请尝试使用“地址”而不是“地址”作为变量名。它与类名和数据类型名非常混淆。
  • -[__NSArrayM stringByReplacingOccurrencesOfString:withString:]:无法识别的选择器发送到实例 0x81afd00
  • 你的地址变量返回一个数组
  • 这意味着“地址”不是字符串,而是返回一个数组。

标签: iphone objective-c ios replace nsstring


【解决方案1】:

试试这个,

NSArray *addressArray = [placemark.addressDictionary objectForKey:@"FormattedAddressLines"];
NSString *address = [addressArray componentsJoinedByString:@", "];
NSLog(@"Address:%@", address);

在您的情况下,[placemark.addressDictionary objectForKey:@"FormattedAddressLines"] 返回一个数组而不是单个字符串。您可以尝试将这些数组组件连接为单个字符串,如上所示。或者你也可以检查

id object = [placemark.addressDictionary objectForKey:@"FormattedAddressLines"];
if([object isKindOfClass[NSArray class]]) {
  //handle as above
} else if([object isKindOfClass[NSString class]]) {
  //use your code
}

【讨论】:

  • 非常感谢您的帮助
【解决方案2】:

你可以像这样删除:-

 NSString *s = @"$$$hgh$g%k&fg$$tw/-tg";
    NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"-/:;()$&@\".,?!\'[]{}#%^*+=_|~<>€£¥•."];
    s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];

    NSLog(@"String is: %@", s);

【讨论】:

    【解决方案3】:

    使用isKindOfClass 检查addressDictionary objectForKey 提供的输出,如下所示:

    if([[placemark.addressDictionary objectForKey:@"FormattedAddressLines"] isKindOfClass[NSArray class]])
    {
    
      NSArray *address=[placemark.addressDictionary objectForKey:@"FormattedAddressLines"];
      NSLog(@"Address:%@",Address);
      NSString *str = [address componentsJoinedByString: @","]
      NSLog(@"str:%@",str);
    }
    

    【讨论】:

      【解决方案4】:

      试试这个......它会帮助你

       NSString *unfilteredString = @"!@#$%^&*()_+|abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
      NSCharacterSet *notAllowedChars = [NSCharacterSet characterSetWithCharactersInString:@"1234567890"];
      NSString *resultString = [[unfilteredString componentsSeparatedByCharactersInSet:notAllowedChars] componentsJoinedByString:@""];
      NSLog (@"Result: %@", resultString);
      

      【讨论】:

      • 这不会产生所需的输出。同样的答案并不总是有效。这将适用于这个问题stackoverflow.com/questions/13487931/…
      • 我发布这个答案是因为 Minu 说“地址是一个字符串”......如果它是一个字符串,它会起作用。
      • 没关系。但是不允许的字符列表中的()在哪里?她想删除 ( ) 而不是数字
      【解决方案5】:
          NSArray *Address=[placemark.addressDictionary objectForKey:@"FormattedAddressLines"];
           NSLog(@"Address:%@",Address);
      
           NSMutableString *myString = [[NSMutableString alloc]init];
      
          for(int i = 0 ; i < [Address count] ; i++){
          [myString appendString:[Address objectAtIndex:i]];
      
      
          if (i < [Address count]  ){
          [myString appendString:@","];
             }
       }
      
      NSLog(@"%@",myString);
      

      【讨论】:

      • 为什么是reinvent the wheel?为什么不直接使用[Address componentsJoinedByString:@", "]
      猜你喜欢
      • 2011-05-03
      • 1970-01-01
      • 2021-01-23
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 2019-04-30
      • 1970-01-01
      相关资源
      最近更新 更多