1

2つの文字の間にある場合、特定の文字が異なる色になるようにしようとしてい<ます>。私はそれをするためにこの方法を使ってみました

-(NSString*)stringBetweenString:(NSString*)start andString:(NSString*)end fromString:(NSString*)other{
NSScanner* scanner = [NSScanner scannerWithString:other];
[scanner setCharactersToBeSkipped:nil];
[scanner scanUpToString:start intoString:NULL];
if ([scanner scanString:start intoString:NULL]) {
    NSString* result = nil;
    if ([scanner scanUpToString:end intoString:&result]) {
        return result;
    }
}
return nil;
}

そしてそれは私が望むことをしますが、1つの部分文字列に対してのみです。それらの文字の間に複数の部分文字列があり、それらすべてを異なる色にしたいと思います。色を変えるのに使う方法はこれです

[self.tv setTextColor:[NSColor redColor] range:[s1 rangeOfString:[self stringBetweenString:@"<" andString:@">" otherString:s1] options:NSCaseInsensitiveSearch]];

はどこself.tvにありますかNSTextView。複数の部分文字列の範囲を取得し、それらの部分文字列の色を変更するにはどうすればよいですか?

4

1 に答える 1

2

使用するNSScannerことは、あなたの場合に最適なアプローチではありません。文字列から部分文字列をコピーしてから、文字列内でその部分文字列を検索して、その範囲を取得します。これはかなり間接的です。2つの代替アプローチ:

  1. NSStringは、さまざまな種類の部分文字列を見つけて、それらを順番にブロックに提示して処理する便利なenumerateSubstringsInRange:options:usingBlock:方法を備えています。残念ながら、どの種類も「山かっこ間のテキスト」ではありませんが、文字列とブロックを受け取り、山かっこで囲まれた各サブ文字列を順番に渡す同様のメソッドを設計できます。部分文字列を見つける方法は?この場合NSString、あなたの助けになりますrangeOfString:options:range:-これは、別の文字列の指定された範囲内の文字列を検索します。文字列全体を範囲として通過するオープンアングルブラケットを探し始めると、最初のアングルブラケットの範囲があればそれを取得します。ここでもう一度呼び出して、開始角度ブラケットの後に文字列を範囲として渡す閉じ角度ブラケットを検索します。それが閉じ角括弧を見つけた場合、あなたは最初の部分文字列を持っています-それをあなたのブロックに渡します。サブストリングの検索が停止するまで繰り返します。
  2. 正規表現検索(を参照)を使用して、NSRegularExpressionすべてのサブストリングを一度に検索し、返されたリストを処理できます。

HTH。

于 2013-03-10T07:30:08.807 に答える