gpt4 book ai didi

ios - 如何在 NSString 中找到 END_OF_LINE 或 WHITESPACE 字符

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

我正在尝试解析一条可能包含网址的推文。我想在推文的其余部分中用不同的颜色/字体格式化 url。很明显,url 可以放在文本中的任何位置。所以我有一个看起来像这样的类别方法:

NSString *urlString = @"";
NSRange startRange = [self rangeOfString:@"http://" options:NSCaseInsensitiveSearch];

if (startRange.length) {
NSString *subStr = [self substringFromIndex:startRange.location];
NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSRange endRange = [subStr rangeOfCharacterFromSet:set];

if (endRange.length) {
NSRange finalRange;
finalRange.location = startRange.location;
finalRange.length = endRange.location - 1;
NSString *finalString = [self substringWithRange:finalRange];
debugTrace(@"finalString : %@", finalString);
}
}

return urlString;

所以基本上我在文本中找到 http:// 的范围,然后从那里到末尾创建一个子字符串。从那里我寻找第一个 whitespaceAndNewlineCharacterSet 并将其用作 url 的结尾以找到 finalString。然而,行

NSRange endRange = [subStr rangeOfCharacterFromSet:set];

返回垃圾值,这让我觉得我没有使用正确的 NSCharacterSet 来查找 endRange

endRange 打印说明:
(NSRange) endRange = location=2147483647, length=0

我该怎么做才能找到 URL 的结束位置。

最佳答案

正如我在评论中提到的,它不是垃圾范围值,它是 NSNotFound 的表示。这意味着您传递给它的字符串中没有出现任何空格或换行符(这是一个有效的案例)。因此,我们需要为此做好准备。

根据您的代码,我将其更改为检查 NSNotFound。此外,无需从 finalRange 长度中减去 1。当我测试这个代码示例时,它从我的 URL 字符串中裁剪了最后一个字符。评论已添加到更改/查询行的末尾。

NSString *urlString = @""; // Is this being used?
NSRange startRange = [self rangeOfString:@"http://" options:NSCaseInsensitiveSearch];

if (startRange.length) {
NSString *subStr = [self substringFromIndex:startRange.location];
NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSRange endRange = [subStr rangeOfCharacterFromSet:set];

if (endRange.location == NSNotFound) { // Check for NSNotFound
debugTrace(@"finalString : %@", subStr);
}
else if (endRange.length) {
NSRange finalRange;
finalRange.location = startRange.location;
finalRange.length = endRange.location; // No need to subtract 1
NSString *finalString = [self substringWithRange:finalRange];
debugTrace(@"finalString : %@", finalString);
}
}

return urlString;

我已经简单地测试过了,它似乎有效。

关于ios - 如何在 NSString 中找到 END_OF_LINE 或 WHITESPACE 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14837565/

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