[英]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.