【问题标题】:Converting an NSString to an NSNumber [duplicate]将 NSString 转换为 NSNumber [重复]
【发布时间】:2013-01-29 19:40:25
【问题描述】:

可能重复:
How to convert an NSString into an NSNumber

如何将NSString(例如@"Five")转换为NSNumber (5)。我在 Stack Overflow 上查看是否有任何问题可以回答这个问题,但似乎很多人一直在要求将数字转换为字符串 - 而不是相反。

【问题讨论】:

  • 您是否尝试将字符串“五”转换为 5(数字)。或将“5”字符串转换为 5。
  • 嗯,他确实说过前者……
  • 您正在寻找类似 NSDate 的 dateWithNaturalLanguageString: 数字的东西。或者类似于 NSNumberFormatter 使用 NSNumberFormatterSpellOutStyle 解析的逆。或者具有 NSLinguisticTagNumber 的 NSLinguisticTagger 能够解析复数。或者带有常用数字数据库的 Levenshtein 距离算法。但是没有这种事悲伤的脸

标签: iphone ios objective-c nsstring nsnumber


【解决方案1】:

这大致工作,至少应该让你开始:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterSpellOutStyle;

NSArray *testStrings = @[@"Five",@"twenty-four",@"Nineteen",@"One hundred forty-two"];

for (NSString *test in testStrings) {

    NSNumber *result = [formatter numberFromString:[test lowercaseString]];

    NSLog (@"String %@ -> %@ as number",test,result);

}

需要考虑的一些事情:

  • 您需要将语言环境正确设置为某个固定语言环境(如果这些字符串都来自服务器或使用一种恒定语言),或者让它浮动到用户的语言环境(如果用户是输入字符串)
  • 正如其他人所指出的,此解析器可能不够复杂,无法满足您的需求。例如,最后一个字符串“三十三”实际上返回了错误的结果。其他工作正常。正如@JonathanGrynspan 所建议的那样,如果您在这里告诉我们更多关于您的目标的信息,也许有人可以提出更好的建议。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    由于以下几个原因,没有内置功能:

    1) 它是模糊的。要说2013(年份),我可能会说“两千一十三”、“两千一十三”、“二十三”、“二开十三”等。这还没有考虑到辩证差异。

    2) 不容易本地化。大声朗读数字的规则因语言而异(因此一组规则不能真正用于每个语言环境),Apple 仅提供可在全球范围内使用的 API。这个星球上的大多数人都不会说英语。

    3) 它假定用户可以正确拼写。 “四十”不是一个数字。 “四十”是。

    如果您告诉我们您为什么要这样做(即目标是什么),也许我们可以提出更好的方法?

    【讨论】:

      【解决方案3】:
      NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
      [f setNumberStyle:NSNumberFormatterDecimalStyle];
      NSNumber * myNumber = [f numberFromString:@"42"];
      

      希望这会有所帮助..

      【讨论】:

        猜你喜欢
        • 2023-04-05
        • 2014-03-12
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        • 2011-04-27
        • 2010-11-29
        • 1970-01-01
        相关资源
        最近更新 更多