繁体   English   中英

Objective-C-如何从字符串中删除字符?

[英]Objective-C - How To Remove Characters From a String?

我有一个具有格式字符串(格式化为货币)的UILabel,所以有一个美元符号$ 21.34。

在核心数据实体中,属性的类型为double,我正在使用NSDecimalNumber保存到数据库。

    self.purchase.name = self.nameTextField.text;
    NSString *string = self.amountLabel.text
    NSDecimalNumber *newAmount = [[NSDecimalNumber alloc] initWithString:string];
    NSLog(@"%@", string); // THIS RETURNS NaN, because of dollar sign i think

    NSManagedObjectContext *context = self.purchase.managedObjectContext;

    NSError *error = nil;
    if (![context save:&error]) 
    {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

无论如何,我需要不是NaN,所以我的想法是删除美元符号,但我不知道该怎么做,否则也许有更好的方法可以实现我的目标。

    NSString* cleanedString = [costString stringByTrimmingCharactersInSet: [NSCharacterSet symbolCharacterSet]];

比上面的代码要健壮得多(而且我认为它也可以处理逗号)

好的,所以我最终使用了这段代码,它对我有用

        NSString *inString = self.amountLabel.text;
    NSMutableString *outString = [NSMutableString stringWithCapacity:inString.length];

    NSScanner *scanner = [NSScanner scannerWithString:inString];
    NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@".0123456789"];

    while ([scanner isAtEnd] == NO)
    {
        NSString *buffer;
        if ([scanner scanCharactersFromSet:numbers intoString:&buffer])
        {
            [outString appendString:buffer];
        }
        else {
            [scanner setScanLocation:([scanner scanLocation] + 1)];
        }

    }
    NSLog(@"%@", outString);
    NSDecimalNumber *amount = [NSDecimalNumber decimalNumberWithString:outString];

    self.purchase.amount = amount;

要添加到@justin的答案中:

[NSCharacterSet symbolCharacterSet]

不会删除逗号。 因此,您可以将其与:

stringByReplacingOccurrencesOfString

并使用:

    NSString* cleanedString = [[costString stringByReplacingOccurrencesOfString:@"," withString:@""] 
stringByTrimmingCharactersInSet: [NSCharacterSet symbolCharacterSet]];

得到一个适合算术的干净数字(例如£1,005.33变成1005.33

确实,您应该拥有一个简单的值,例如,如果使用货币进行交易则是浮点数。 然后,您应该有一个代表您的值的字符串。 您可以使用NSNumberFormatter从值到字符串,就像您说的那样,但是您不应该依赖字符串作为该值的唯一来源。

另外,NSDecimalNumber对于表示货币之类的东西可能会过大。 NSDecimalNumber更适合处理科学计数形式的数字。

使用numberWithDouble:这样的简单NSNumber对象就足以处理货币。

结合@justin和@leafy的答案:

[[@"$1,000" stringByReplacingOccurrencesOfString:@"," withString:@""] stringByTrimmingCharactersInSet: [NSCharacterSet symbolCharacterSet]];

这将给您1000。

尝试这个:

NSDecimalNumber *newAmount = [[NSDecimalNumber alloc] initWithString:[string substringFromIndex:1]];

如果需要删除$符号。 为什么不只在处理数字之前执行以下操作

NSString *newStringValue = [inputString stringByReplacingOccurrencesOfString:@"$" withString:@""];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM