2013-03-27 4 views
1

Как проверить, не является ли символ в моем NSString символом без пробела?Поиск символов без пробелов в Objective-C

Например:

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

Длина NSString составляет 11, но на самом деле пространство, которое она занимает в 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:@""]; 

Таким образом, для этого примера длина новой строки равна 3. Это то, что я ищу. Спасибо людям.

+0

Ваша строка имеет только 1 пробел. поэтому длина равна 11 после ее удаления. –

+0

Думаю, я изменю вопрос, чтобы сделать его более ясным. – user774150

+0

, что из-за разных unicode имеет разный вес, например, вы используете малайский или какой-либо другой язык, а на английском языке есть еще один юникод. вот почему –

ответ

1

Вы можете использовать [NSCharacterSet nonBaseCharacterSet] для извлечения набора символов в категории знаков Юникода. NSCharacterSet предоставляет возможность проверить, является ли данный символ членом набора, а NSString предоставляет возможность находить определенные символы в строке, которые являются (или не являются) членами заданного NSCharacterSet.