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

iAm*_*iAm 1 iphone formatting objective-c nsdecimalnumber

我有一个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();
    }
Run Code Online (Sandbox Code Playgroud)

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

jus*_*tin 10

    NSString* cleanedString = [costString stringByTrimmingCharactersInSet: [NSCharacterSet symbolCharacterSet]];
Run Code Online (Sandbox Code Playgroud)

比上面的更强大(我认为它也会处理逗号)


iAm*_*iAm 5

好的,所以我最终使用这个代码,它适用于我

        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;
Run Code Online (Sandbox Code Playgroud)

  • 呃,这完全是矫枉过正。您可以使用“NSNumberFormatter”来删除字符串周围的格式并将其作为“NSNumber”返回给您。每当您遇到将符号放置在数字右侧的货币时,您的代码也会中断。`NSNumberFormatter` 可以正确处理它。 (2认同)