1

NSString自分の文字が非スペーシング文字であるかどうかを確認するにはどうすればよいですか?

例えば:

NSString *string3 = @"เบียร์เหล้า";
//                    12345678 <- only take up 8 spaces

長さは11ですが、NSString実際に占めるスペースは8です。

Javaでは、以下のコードを使用して文字タイプを確認できます。

static boolean isMark(char ch)
{
    int type = Character.getType(ch);
    return type == Character.NON_SPACING_MARK ||
           type == Character.ENCLOSING_MARK ||
           type == Character.COMBINING_SPACING_MARK;
}

Objective-Cはどうですか?

bdashに感謝します。

NSCharacterSet *characterSet = [NSCharacterSet nonBaseCharacterSet];

for (int i = 0; string3.length > i; i++)
{
    NSString *string = [string3 substringWithRange:NSMakeRange(i, 1)];
    NSRange letterRange = [string rangeOfCharacterFromSet:characterSet];
    if (letterRange.location != NSNotFound)
    {
        NSLog(@"non base character set");
    }
    else
    {
        NSLog(@"normal");
    }
}

スペースを占めていないキャラクターがわかります。別の方法では、以下のコードを使用して、間隔を空けていない文字の合計を見つけることができます。

NSString *newString = [[string3 componentsSeparatedByCharactersInSet:
                            [[NSCharacterSet nonBaseCharacterSet] invertedSet]] componentsJoinedByString:@""];

したがって、この例では、newStringの長さは3です。これが私が探しているものです。人々に感謝します。

4

1 に答える 1

1

[NSCharacterSet nonBaseCharacterSet]Unicodeマークカテゴリの文字セットを取得するために使用できます。NSCharacterSet特定の文字がセットのメンバーであるかどうかをテストする機能を提供し、NSString特定ののメンバーである(またはメンバーではない)文字列内の特定の文字を検索する機能を提供しますNSCharacterSet

于 2013-03-27T08:08:48.490 に答える