我一直在尝试使用UITextChecker来查看字符串中的单词是否实际上是一个单词。我已经使用我在网上找到的示例将代码拼凑在一起,但我并不真正理解它,而且它有点超出了我的水平。有人能帮我找出如何检查字符串中的单词是否真的是单词吗?我还在学习这一切,所以非常感谢!
-(IBAction)pushButton:(id)sender{
label.text = textField.text;
NSString * currentWord;
currentWord = label.text;
NSRange range = NSMakeRange(0, 0);
range = [textChecker rangeOfMisspelledWordInString:[currentWord lowercaseString]
range:NSMakeRange(0, [currentWord length])
startingAt:0
wrap:NO
language:@"en_US"];
if (range.location == NSNotFound) {
NSLog(@"Word found");
}
else {
NSLog(@"Word not found");
}
}更新:我仍然有这个问题,因为我的日志显示"Word not found“,无论我在文本字段中输入什么内容。我也想发布我的.h文件,看看是否有不正确的地方。这里还有一个链接,可以链接到我获得原始代码的地方,以防有帮助。再次感谢。
#import <UIKit/UIKit.h>
#import <UIKit/UITextChecker.h>
@interface CheckIfWordViewController : UIViewController {
IBOutlet UILabel * label;
IBOutlet UITextField * textField;
IBOutlet UIButton * button;
UITextChecker * textChecker;
}
@property (retain, nonatomic) UITextChecker * textChecker;
@property (retain, nonatomic) UIButton * button;
@property (retain, nonatomic) UILabel * label;
@property (retain, nonatomic) UITextField * textField;
-(IBAction)pushButton:(id)sender;
@end发布于 2012-01-01 05:09:06
我被UITextChecker发现总是返回NSNotFound,即使是拼写错误的单词,因为我只给它提供大写的单词。通过提交currentWord lowercaseString解决了菜鸟的一个小问题。我还通过研究发现,超过25个字符的单词也会返回NSNotFound,而不管拼写是否错误。
发布于 2011-03-17 09:35:51
您的代码看起来像是向rangeOfMisspelledWordInString传递了一个单词--我认为您希望使用整个字符串并使用返回的NSRange来确定UITextChecker认为哪个单词拼写错误。因此,不传递currentWord,而是传递整个字符串。如果没有任何拼写错误,则会在计算时得到range.location == NSNotFound。
单词检查的效果取决于您所检查的字典。我相信是Don Knuth发明了这种检查单词的方法:
在您的例子中,您只关心是否有零个匹配。如果至少有一个匹配,则表示有一个有效的单词。
我不知道UITextChecker到底用的是什么字典,但没有什么比拒绝一个正确的单词更让人恼火的了。尤其是如果他们认为自己的话有点晦涩难懂,而且他们自己很聪明地使用了它。使用一个包罗万象的字典,比如官方的拼字游戏参考,就可以避免这个问题。
发布于 2011-03-17 09:55:15
你的代码看起来是正确的,我猜从你的问题中你想要它被解释?
label.text = textField.text;这一行接受在textField (假定为UITextField)中输入的文本,并将其分配给label (假定为UILabel)的text属性。它与拼写检查本身没有任何关系。
NSString * currentWord;
currentWord = label.text;这会将文本字符串复制回标签的text属性。
NSRange range = NSMakeRange(0, 0);这将声明一个NSRange结构,并将其初始化为空值。没有必要,因为下一行将会改变它。
range = [textChecker rangeOfMisspelledWordInString:[currentWord lowercaseString]
range:NSMakeRange(0, [currentWord length])
startingAt:0
wrap:NO
language:@"en_US"];这是实际执行工作的行。
startingAt:0指定它应该从范围的开头开始。在循环中使用它,在找到第一个拼写错误的单词后,告诉它从单词末尾开始查找another.wrap:NO告诉它,如果拼写错误的单词,不要从范围的开头重新开始。不要紧的是,here.似乎没有任何方法可以指定自定义字典BTW。
if (range.location == NSNotFound) {
NSLog(@"Word found");
}
else {
NSLog(@"Word not found");
}这只是检查结果。如果发现拼写错误的单词,range.location将是单词的开头,range.length将是长度。如果所有单词都拼写正确,则range.location将为NSNotFound,range.length将为0。
https://stackoverflow.com/questions/5333723
复制相似问题