在開(kāi)發(fā)過(guò)程中,經(jīng)常要對(duì)用戶輸入的內(nèi)容進(jìn)行長(zhǎng)度限制。而對(duì)于字符串信息來(lái)講,中文字符和英文字符雖然長(zhǎng)度不同,但都占一個(gè)字符。下面我們寫(xiě)一個(gè)函數(shù)來(lái)計(jì)算字符串的長(zhǎng)度。
static func numberOfChars(_ str: String) -> Int {
var number = 0
guard str.characters.count > 0 else {return 0}
for i in 0...str.characters.count - 1 {
let c: unichar = (str as NSString).character(at: i)
if (c >= 0x4E00) {
number += 2
}else {
number += 1
}
}
return number
}
代碼中的 0x4E00 是一個(gè)十六進(jìn)制數(shù),這是字符編碼集中中文字符開(kāi)始的地方,日文的編碼邊界是 0x0800。 所以我們根據(jù)這個(gè)邊界值來(lái)判斷字符應(yīng)該占兩位還是一位。