我正在制作一个翻译程序,它将采用英语语言文本(用户输入到UITextView中)和(按下按钮)用替代词替换特定单词。我在范围内加上英语单词加上他们在单独数组中的替代词(englishArray和alternativeArray),相应地编入索引。
我的挑战是找到一种算法,允许我在输入文本中识别一个单词(UITextView),忽略像<“,。()>这样的字符,在englishArray中查找单词(不区分大小写),找到alternativeArray中的相应单词,然后使用该单词代替原始单词 - 将其写回UITextView。
非常感谢任何帮助。
NB。我创建了一个使用indexOfCaseInsensitiveString方法扩展NSArray功能的类别,该方法在执行indexOfObject类型查找时忽略大小写(如果有帮助的话)。
贝。
答案 0 :(得分:0)
我认为使用NSScanner最好将字符串解析为单独的单词,然后将其传递给indexOfCaseInsensitiveString方法。 scanCharactersFromSet:intoString:使用一组你要忽略的所有字符,包括空格和换行字符应该让你到一个单词的开头,然后你可以使用scanUpToCharactersFromSet:intoString:使用相同的集扫描到结尾这个单词。在每次扫描的开始和结束时使用scanLocation应该允许您获取该单词的范围,因此如果您在数组中找到匹配项,您将知道字符串中的替换位置。
答案 1 :(得分:0)
感谢您的建议。它有一个例外。
我想要捕获所有标点符号,以便我可以重新创建原始输入但使用替换的单词。即使我的字符集中有一个“空格”,扫描仪也没有将空格放入'intoString'。我在字符集中指定的其他字符,例如'('和';'表示在'intoString'中。
Net是当我重新创建输入时,它是完美的,除了我让单个单词相互碰撞。
更新:我通过包含:
解决了这个问题[theScanner setCharactersToBeSkipped:nil];
再次感谢。