【发布时间】:2015-02-08 20:43:09
【问题描述】:
我只是在学习 Swift 并玩弄 CFStringTokenizer,我注意到当字符串被标记化时,标点符号和符号被忽略了。我对标记化的主题不太熟悉,但如果我需要做更复杂的标记化,需要我找到诸如“!”之类的东西,我想更好地理解标记器是如何工作的。或“+”。任何帮助将不胜感激。
所以我的问题是:
- 忽略符号和标点符号是预期的行为吗?
- 有没有办法让 CFStringTokenizer 将符号视为标记或将符号保留为标记的一部分?即“+”、“-3”或“世界!”
- 谁能解释一下 CFStringTokenizerTokenType 如何用于测试令牌类型?
这是我一直在使用的游乐场:
import Cocoa
var str = "I have 2 pairs of pants + five shirts, but threw out 3 socks with holes! 2+5-3"
var tokens: [(token: String, range: CFRange, type: CFStringTokenizerTokenType)] = []
var strLen = countElements(str)
var strRng = CFRangeMake(0, strLen)
var flag = UInt(kCFStringTokenizerUnitWord)
var locale = CFLocaleCopyCurrent()
var tknizr = CFStringTokenizerCreate( kCFAllocatorDefault, str, strRng, flag, locale)
var tknType = CFStringTokenizerAdvanceToNextToken(tknizr)
do {
var tRng = CFStringTokenizerGetCurrentTokenRange(tknizr)
var from = advance(str.startIndex, tRng.location)
var to = advance(from, tRng.length)
var substrRng = Range<String.Index>(start: from, end: to)
var substr = str.substringWithRange(substrRng)
println("String: \(substr)")
println("Token Type: \(tknType.rawValue)\n")
tokens += [(substr, tRng, tknType)]
tknType = CFStringTokenizerAdvanceToNextToken(tknizr)
} while tknType.rawValue != 0
--更新--
我添加了objective-c标签,因为这也适用于obj-c。
【问题讨论】:
标签: objective-c swift tokenize