【问题标题】:Why Strings are not equal in my case?为什么在我的情况下字符串不相等?
【发布时间】:2018-07-25 11:49:01
【问题描述】:

我有 currencyFormatterse_SV 语言环境。

var currencyFormatter: NumberFormatter = {
    let formatter = NumberFormatter()
    formatter.currencySymbol = ""
    formatter.locale = Locale(identifier: "se_SV")
    formatter.minimumFractionDigits = 2
    formatter.maximumFractionDigits = 2
    formatter.numberStyle = .currencyAccounting
    formatter.isLenient = true
    return formatter
}()

我正在将NSNumber 转换为String

let firstString = currencyFormatter.string(from: NSNumber(value: 22222222.50)) // "22 222 222,50 "

然后我手动创建 StringfirstString 相同。

let secondString = "22 222 222,50 "

为什么当我检查firstString == secondString 我收到false 时?

【问题讨论】:

  • 他们在 ,50 之后都有 " "

标签: swift string number-formatting


【解决方案1】:
print(Array(firstString!.unicodeScalars))
// ["2", "2", "\u{00A0}", "2", "2", "2", "\u{00A0}", "2", "2", "2", ",", "5", "0", "\u{00A0}"]

print(firstString!.replacingOccurrences(of: "\u{A0}", with: " ") == secondString)
// true

显示数字格式化程序用“不间断空格”U+00A0 分隔组。这可以防止号码被拆分 多行文本中的行。

【讨论】:

  • 是有道理的,因为这将允许可访问性界面将其理解为正确的数值而不是多个值。
  • 您可以通过直接检查格式化程序的groupingSeparator 看到这一点:print(currencyFormatter.groupingSeparator.unicodeScalars.map { $0.escaped(asASCII: true) }) 产生["\\u{00A0}"]
猜你喜欢
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
相关资源
最近更新 更多