我有一个从http GET回来的大字符串,我正在尝试确定它是否有特定的文本片段(请在这里原谅我的罪过)
我的问题是:可以/我应该使用NSRange来确定这段文本是否确实存在?
NSRange textRange;
textRange =[[responseString lowercaseString] rangeOfString:[@"hat" lowercaseString]];
if(textRange.location != NSNotFound)
{
//do something magical with this hat
}
Run Code Online (Sandbox Code Playgroud)
先感谢您!
我有以下内容NSString:
productID = @"com.sortitapps.themes.pink.book";
Run Code Online (Sandbox Code Playgroud)
最后,"书"可以是任何东西......"音乐","电影","游戏"等.
我需要在粉红色这个词之后找到第三个句号,这样我就可以用其他东西替换最后一个"书"字.我如何使用NSRange执行此操作?基本上我需要这个:
partialID = @"com.sortitapps.themes.pink.";
Run Code Online (Sandbox Code Playgroud) 尝试通过选择设置我的UIText视图的属性文本属性.几乎是有效的.使用下面的红色字体颜色设置文本的操作.这有时会起作用,但通常会出错:
因未捕获的异常'NSRangeException'而终止应用程序,原因:'NSMutableRLEArray objectAtIndex:effectiveRange :: out of bounds'
即使文本视图中的字符似乎多于所选范围所指示的字符,也会发生这种情况.
- (IBAction)setText:(id)sender {
NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithAttributedString:myTextView.attributedText];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(p1,p2)];
myTextView.attributedText = string;
}
Run Code Online (Sandbox Code Playgroud)
p1和p2是所选文本的开头和结尾.它们是使用下面的代码生成的,它似乎按预期工作:
- (void)textViewDidChangeSelection:(UITextView *)textView {
UITextRange *selectedRange = [myTextView selectedTextRange];
p1 = [myTextView offsetFromPosition:myTextView.beginningOfDocument toPosition:[selectedRange start]];
p2 = [myTextView offsetFromPosition:myTextView.beginningOfDocument toPosition:[selectedRange end]];
}
Run Code Online (Sandbox Code Playgroud)
编辑:我在阅读@ borrrden的评论后解决了这个问题.而不是NSMakeRange(p1,p2)]我使用NSMakeRange(p1,p2-p1)].
我写了一个方法来突出显示一个段落NSString中的单词,通过发送一个单词,它完美地工作,直到我遇到这种情况:
当我有这个文字时:
他们的母亲试图在其他地方穿上它们......
当我传递这个词时other,"m other" 这个词正在突出显示,当我走过时,in我得到了"礼服ing".
这是我的代码:
-(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];
}
Run Code Online (Sandbox Code Playgroud)
我试过使用rangeOfString:options:包含所有选项,但仍然有同样的问题.
请指教
PS: 这是我的代码的来源
这是我得到的一个非常奇怪的错误。是这样的:
'NSRangeException', reason: '*** -[NSArray subarrayWithRange:]: range {2, 3} extends beyond bounds [0 .. 3]'
Run Code Online (Sandbox Code Playgroud)
我不明白的是,范围 (2,3) 显然不会超出范围 (0,3)
事实上,它在这些范围内,因为我像这样设置了数组和范围:
NSRange range = NSMakeRange([wordArray indexOfObject:letterInWordArray]+1,wordArray.count-1);
NSMutableArray* sortedSubArray = [[NSMutableArray alloc] initWithArray:[wordArray subarrayWithRange:range]];
Run Code Online (Sandbox Code Playgroud)
本质上,我正在遍历一个名为 wordArray 的数组,并且我想创建一个包含我尚未遍历的所有项目的子数组。有人可以帮我从这里出去吗?
我正在使用此方法将NSRange转换为CGRect,因为它与UITextView相关:
- (CGRect)frameOfTextRange:(NSRange)range inTextView:(UITextView *)textView
{
UITextPosition *beginning = textView.beginningOfDocument;
UITextPosition *start = [textView positionFromPosition:beginning offset:range.location];
UITextPosition *end = [textView positionFromPosition:beginning offset:range.location+range.length];
UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end];
CGRect rect = [textView firstRectForRange:textRange];
return rect;
}
Run Code Online (Sandbox Code Playgroud)
这个问题的答案是有人问我同样的问题.上述方法适用于此:
这是一个伟大的文本领域是的,它是findthistoken
不像这样:
this is a great one
(new line)
(new line)
findthistoken
Run Code Online (Sandbox Code Playgroud)
它似乎完全忽略了有2个新行字符的事实?:/
如何使用新的行字符?
因为我发现的所有样本都使用 NSRange 版本,所以一直在使用这个方法,但在 Swift 2 中,此方法返回一个范围,因此没有要测试的位置。
我知道未找到的结果是 {NotFound,0} 但没有史酷比如何测试它?
if (contact.facebook!.rangeOfCharacterFromSet(characterSet.invertedSet).location != NSNotFound){...}
Run Code Online (Sandbox Code Playgroud)
错误,但我不知道如何查询范围
我有一个 NSMutatableString:
var string: String = "Due in %@ (%@) $%@.\nOverdue! Please pay now %@"
attributedText = NSMutableAttributedString(string: string, attributes: attributes)
Run Code Online (Sandbox Code Playgroud)
如何快速计算单词的长度和起始索引Overdue?
到目前为止,我已经尝试过:
let startIndex = attributedText.string.rangeOfString("Overdue")
let range = startIndex..<attributedText.string.finishIndex
// Access the substring.
let substring = value[range]
print(substring)
Run Code Online (Sandbox Code Playgroud)
但它不起作用。
let fullString = "Hello world, there are \(string(07)) continents and \(string(195)) countries."
let range = [NSMakeRange(24,2), NSMakeRange(40,3)]
Run Code Online (Sandbox Code Playgroud)
需要找到整个完整字符串中数字的 NSRange,并且两个数字有可能相同。目前如上所示进行硬编码,消息可以是动态的,而硬编码值将出现问题。
我已经分割了字符串并尝试获取,NSRange因为可能存在相同的值。比如 stringOne 和 stringTwo。
func findNSMakeRange(initialString:String, fromString: String) {
let fullStringRange = fromString.startIndex..<fromString.endIndex
fromString.enumerateSubstrings(in: fullStringRange, options: NSString.EnumerationOptions.byWords) { (substring, substringRange, enclosingRange, stop) -> () in
let start = distance(fromString.startIndex, substringRange.startIndex)
let length = distance(substringRange.startIndex, substringRange.endIndex)
let range = NSMakeRange(start, length)
if (substring == initialString) {
print(substring, range)
}
})
}
Run Code Online (Sandbox Code Playgroud)
收到类似错误Cannot invoke distance with an argument list of …
我试图找到一个自昨晚以来困扰我的问题的答案.
NSRange searchRange.location = 0;
NSRange searchRange.length = [string length]; // > 2000 characters long
NSString *substring = @"substring"; // Occurs within string several times
NSRange substringRange = [string rangeOfString:substring options:NSCaseInsensitiveSearch range:searchRange];
// Some code here. Create substring and add it to array.
// Move the search range on
searchRange.location = substringRange.location + substringRange.length;
// fails
substringRange = [string rangeOfString:substring options:NSCaseInsensitiveSearch range:searchRange];
Run Code Online (Sandbox Code Playgroud)
第一个[string rangeOfString ...]方法无故障地调用,但第二个调用导致以下错误:
* - [__ NSCFString rangeOfString:options:range:locale:]:范围或索引超出范围
据我所知,问题是由新值赋值给searchRange.location引起的 - 删除该语句会导致第二次成功调用该方法.看看调试器,这些值看起来像预测的那样 - 没有任何超出范围的东西 - 而且我还在监视器上尖叫.
这只是简单的添加......不是吗?
nsrange ×10
objective-c ×5
ios ×4
nsstring ×2
swift ×2
uitextview ×2
nsarray ×1
range ×1
swift2 ×1