gpt4 book ai didi

cocoa - 从 NSTextView 中提取第一个非空白行的最有效方法?

转载 作者:行者123 更新时间:2023-12-03 16:17:40 26 4
gpt4 key购买 nike

从 NSTextView 中提取第一个非空白行的最有效方法是什么?

例如,如果文本是:

\n
\n
\n
This is the text I want \n
\n
Foo bar \n
\n

结果将是“这是我想要的文本”。

这是我所拥有的:

NSString *content = self.textView.textStorage.string;
NSInteger len = [content length];
NSInteger i = 0;

// Scan past leading whitespace and newlines
while (i < len && [[NSCharacterSet whitespaceAndNewlineCharacterSet] characterIsMember:[content characterAtIndex:i]]) {
i++;
}
// Now, scan to first newline
while (i < len && ![[NSCharacterSet newlineCharacterSet] characterIsMember:[content characterAtIndex:i]]) {
i++;
}
// Grab the substring up to that newline
NSString *resultWithWhitespace = [content substringToIndex:i];
// Trim leading and trailing whitespace/newlines from the substring
NSString *result = [resultWithWhitespace stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

有没有更好、更有效的方法?

我正在考虑将其放入 -textStorageDidProcessEditing: NSTextStorageDelegate 方法中,以便我可以在编辑文本时获取它。这就是为什么我希望该方法尽可能高效。

最佳答案

只需使用专为此类事情设计的NSScanner:

NSString* output = nil;
NSScanner* scanner = [NSScanner scannerWithString:yourString];
[scanner scanCharactersFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] intoString:NULL];
[scanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:&output];
output = [output stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

请注意,如果您可以扫描到特定字符而不是字符集,速度会快得多:

[scanner scanUpToString:@"\n" intoString:&output];

关于cocoa - 从 NSTextView 中提取第一个非空白行的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6379715/

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