首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSNumberFormatter分组

NSNumberFormatter分组
EN

Stack Overflow用户
提问于 2016-05-26 09:06:53
回答 2查看 1.5K关注 0票数 0

我想用数字格式化字符串,如下所示:XX XX XX (例如,12 34 56)

我使用NSNumberFormatter和分组分隔符:

代码语言:javascript
复制
let formatter = NSNumberFormatter()
formatter.usesGroupingSeparator = true
formatter.groupingSize = 2
formatter.groupingSeparator = " "
if let number = Int(theText.stringByReplacingOccurrencesOfString(" ", withString: "")) {
       let numberToFormat = NSNumber(integer:number)
       textField.text = formatter.stringFromNumber(numberToFormat)
}

如果输入数字123456,这将很好--它被格式化为12 34 56

我在shouldChangeCharactersInRange方法中使用这个方法,所以它应该在键入时格式化数字。分组分隔符定义的数字是从右侧按groupingSize值分组的,所以当您键入123456时,文本是如何改变的:

代码语言:javascript
复制
1
12
1 23
12 34
1 23 45
12 34 45

我想把它格式化如下:

代码语言:javascript
复制
1
12
12 3
12 34
12 34 5
12 34 56

是否可以从哪一方定义分隔符组号?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-26 10:32:03

不确定如果你必须要隐藏到Int,在结尾添加一个"0“怎么样?然后删除最后一个"0“。

代码语言:javascript
复制
let formatter = NSNumberFormatter()
formatter.usesGroupingSeparator = true
formatter.groupingSize = 2
formatter.groupingSeparator = " "

var str = "12345"
if str.characters.count % 2 != 0 {
    str += "0"
}
if let number = Int(str.stringByReplacingOccurrencesOfString(" ", withString: "")) {
    let numberToFormat = NSNumber(integer:number)
    formatter.stringFromNumber(numberToFormat)
}

另一种解决办法是:

代码语言:javascript
复制
let string = "12345"

var results = [String]()
for index in 0 ..< string.characters.count-1 {
    if index % 2 == 0 {
        let range = NSRange(location: index, length: 2)
        results.append((string as NSString).substringWithRange(range))
    }
}

if string.characters.count % 2 != 0 {
    let last = (string as NSString).substringFromIndex(string.characters.count-1)
    results.append(last)
}
票数 1
EN

Stack Overflow用户

发布于 2018-08-02 08:19:47

Swit 4

您必须使用UITextField:func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String)的委托

这样做很好:

代码语言:javascript
复制
 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if textField == YourTextField {
        if (textField.text?.count)! < 8 {
            let formatter = NumberFormatter()
            formatter.usesGroupingSeparator = true
            formatter.locale = NSLocale(localeIdentifier: "en_GB") as Locale?
            formatter.groupingSize = 2
            formatter.groupingSeparator = "-" // if you want the format XX-XX-XX
            // Uses the grouping separator corresponding
            if let groupingSeparator = formatter.groupingSeparator {

                if string == groupingSeparator {
                    return true
                }
                if let textWithoutGroupingSeparator = textField.text?.replacingOccurrences(of: groupingSeparator, with: "") {
                    var totalTextWithoutGroupingSeparators = textWithoutGroupingSeparator + string
                    if string == "" { // pressed Backspace key
                        totalTextWithoutGroupingSeparators.characters.removeLast()
                    }
                    if let numberWithoutGroupingSeparator = formatter.number(from: totalTextWithoutGroupingSeparators),
                        let formattedText = formatter.string(from: numberWithoutGroupingSeparator) {
                        print(numberWithoutGroupingSeparator)
                        numberWithoutGroupingSeparators = String(format: "%@", numberWithoutGroupingSeparator)
                        textField.text = formattedText
                        return false
                    }
                }
            }
            return true
        }
    }
        return true

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37456328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档