gpt4 book ai didi

ios - NSRange,在段落中找到一个词得到错误的结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:07:51 26 4
gpt4 key购买 nike

我编写了一种方法,通过向它发送该词的 NSString 来突出显示段落中的词,在我遇到这种情况之前,它一直运行良好:

当我有这段文字时:

Their mother has tried dressing them in other ...

当我传递单词 other 时,单词“mother”被突出显示,当我传递 in 时也是如此我得到了“dressing”。

这是我的代码:

-(void)setTextHighlited :(NSString *)txt{
NSMutableAttributedString * string = [[NSMutableAttributedString alloc]initWithString:self.textLabel.text];

for (NSString *word in [self.textLabel.text componentsSeparatedByString:@" "]) {

if ([word hasPrefix:txt]) {
NSRange range=[self.textLabel.text rangeOfString:word];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:range];
}

我试过使用 rangeOfString:options:具有所有选项,但仍然存在相同的问题。

请多多指教

附注: This is the source of my code

最佳答案

问题是

NSRange range=[self.textLabel.text rangeOfString:word];

查找文本中单词的第一次 出现。一个更好的选择是按单词枚举文本:

-(void)setTextHighlited :(NSString *)txt{

NSString *text = self.textLabel.text;
NSMutableAttributedString *string = [[NSMutableAttributedString alloc]initWithString:text];

[text enumerateSubstringsInRange:NSMakeRange(0, [text length])
options:NSStringEnumerationByWords usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
if ([substring isEqualToString:txt]) {
[string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:substringRange];
}
}];
self.textLabel.attributedText = string;
}

这种方法还有很多优点,比如即使是单词也能找到用引号括起来或用标点符号包围。

关于ios - NSRange,在段落中找到一个词得到错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20260381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com