NSCharacter​Set 使用说明

时间:2023-03-10 00:36:26
NSCharacter​Set  使用说明

NSCharacter​Set 和 NSMutableCharacterSet  用面向对象的方式来表示一组Unicode字符,它经常与NSStringNSScanner组合起来使用,在不同的字符上做过滤、删除或者分割操作。为了给你提供这些字符是哪些字符的直观印象,请看看NSCharacterSet 提供的类方法

  • alphanumericCharacterSet
  • capitalizedLetterCharacterSet
  • controlCharacterSet
  • decimalDigitCharacterSet
  • decomposableCharacterSet
  • illegalCharacterSet
  • letterCharacterSet
  • lowercaseLetterCharacterSet
  • newlineCharacterSet
  • nonBaseCharacterSet
  • punctuationCharacterSet
  • symbolCharacterSet
  • uppercaseLetterCharacterSet
  • whitespaceAndNewlineCharacterSet
  • whitespaceCharacterSet

我们使用下边的方法 打印看看这些方法

 void dumpCharacterSet( NSString *name )
{
unichar idx;
NSCharacterSet *cset = [NSCharacterSet performSelector: NSSelectorFromString(name)]; printf("Character set (0-127): %s\n7-Bit: ", [name UTF8String]); for( idx = ; idx < ; idx++ )
{
if ( == idx ) {
printf( "\n8-Bit: " );
} //Returns a Boolean value that indicates whether a given character is in the receiver.
if ([cset characterIsMember: idx])
{
//判断字符c是否为可打印字符(含空格)
if ( isprint(idx) ) {
printf( "%c ", idx);
}
else {
printf( "%02x ", idx);
}
}
}
printf("\n\n");
}
 // Reference output...
dumpCharacterSet( @"alphanumericCharacterSet" );
dumpCharacterSet( @"controlCharacterSet" );
dumpCharacterSet( @"decimalDigitCharacterSet" );
dumpCharacterSet( @"decomposableCharacterSet" );
dumpCharacterSet( @"illegalCharacterSet" );
dumpCharacterSet( @"letterCharacterSet" );
dumpCharacterSet( @"lowercaseLetterCharacterSet" );
dumpCharacterSet( @"nonBaseCharacterSet" );
dumpCharacterSet( @"punctuationCharacterSet" );
dumpCharacterSet( @"uppercaseLetterCharacterSet" );
dumpCharacterSet( @"whitespaceAndNewlineCharacterSet" );
dumpCharacterSet( @"whitespaceCharacterSet" );

打印结果如下

Character set (-): alphanumericCharacterSet
-Bit: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z
-Bit: aa b2 b3 b5 b9 ba bc bd be c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf d0 d1 d2 d3 d4 d5 d6 d8 d9 da db dc dd de df e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f8 f9 fa fb fc fd fe ff Character set (-): controlCharacterSet
-Bit: 0a 0b 0c 0d 0e 0f 1a 1b 1c 1d 1e 1f 7f
-Bit: 8a 8b 8c 8d 8e 8f 9a 9b 9c 9d 9e 9f ad Character set (-): decimalDigitCharacterSet
-Bit:
-Bit: Character set (-): decomposableCharacterSet
-Bit:
-Bit: c0 c1 c2 c3 c4 c5 c7 c8 c9 ca cb cc cd ce cf d1 d2 d3 d4 d5 d6 d9 da db dc dd e0 e1 e2 e3 e4 e5 e7 e8 e9 ea eb ec ed ee ef f1 f2 f3 f4 f5 f6 f9 fa fb fc fd ff Character set (-): illegalCharacterSet
-Bit:
-Bit: Character set (-): letterCharacterSet
-Bit: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z
-Bit: aa b5 ba c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf d0 d1 d2 d3 d4 d5 d6 d8 d9 da db dc dd de df e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f8 f9 fa fb fc fd fe ff Character set (-): lowercaseLetterCharacterSet
-Bit: a b c d e f g h i j k l m n o p q r s t u v w x y z
-Bit: b5 df e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f8 f9 fa fb fc fd fe ff Character set (-): nonBaseCharacterSet
-Bit:
-Bit: Character set (-): punctuationCharacterSet
-Bit: ! " # % & ' ( ) * , - . / : ; ? @ [ \ ] _ { }
-Bit: a1 a7 ab b6 b7 bb bf Character set (-): uppercaseLetterCharacterSet
-Bit: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
-Bit: c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf d0 d1 d2 d3 d4 d5 d6 d8 d9 da db dc dd de Character set (-): whitespaceAndNewlineCharacterSet
-Bit: 0a 0b 0c 0d
-Bit: a0 Character set (-): whitespaceCharacterSet
-Bit:
-Bit: a0

非常的直观,当我们 使用的时候对照这个打印结果操作就行,

下边再说一下如何过滤的

 // Set up for reading testString
NSString *testString = @"Los Angeles;8.25;0.580561574;1,Tokyo;1.9;0.643872234;1;Honolulu,0;0;0;Toronto;7.9;5.3322;3;";
// Parse CSV with NSScanner
NSScanner *myScanner = [NSScanner scannerWithString:testString]; NSString *location;
float theRevenue;
float thePercent;
int theRank; // Set up data delimiter using semicolon//分号 NSCharacterSet *CharacterSet; //Returns a character set containing the characters in a given string.
CharacterSet = [NSCharacterSet characterSetWithCharactersInString:@";,"]; // Double check scanner string
NSLog (@"Scanner string\n"); //Returns the string with which the receiver was created or initialized.
NSLog (@"%@",[myScanner string]); // scanner loop start
while ([myScanner isAtEnd] == NO) { if ( [myScanner scanUpToCharactersFromSet:CharacterSet intoString:&location] ) {
NSLog (@"%@",location);
} // Skipping the ; and ,delimiter
if([myScanner scanString:@";" intoString:NULL] || [myScanner scanString:@"," intoString:NULL])
;
// Read Revenue data up to ; delimiter and skipping
//Scans for a float value, returning a found value by reference.
if([myScanner scanFloat:&theRevenue])
NSLog(@"%lf",theRevenue);
if([myScanner scanString:@";" intoString:NULL] || [myScanner scanString:@"," intoString:NULL])
; // Read Percentage data up to ; delimiter and skipping
if([myScanner scanFloat:&thePercent])
NSLog(@"%lf",thePercent);
if([myScanner scanString:@";" intoString:NULL] || [myScanner scanString:@"," intoString:NULL])
; // Read Ranking data up to ; delimiter and skipping
if([myScanner scanInt:&theRank])
NSLog(@"%i",theRank);
if([myScanner scanString:@";" intoString:NULL] || [myScanner scanString:@"," intoString:NULL])
;
}

打印结果如下

-- ::37.967 ModelBenchmark[:] Los Angeles
-- ::37.967 ModelBenchmark[:] 8.250000
-- ::37.967 ModelBenchmark[:] 0.580562
-- ::37.968 ModelBenchmark[:]
-- ::37.968 ModelBenchmark[:] Tokyo
-- ::37.968 ModelBenchmark[:] 1.900000
-- ::37.968 ModelBenchmark[:] 0.643872
-- ::37.968 ModelBenchmark[:]
-- ::37.968 ModelBenchmark[:] Honolulu
-- ::37.968 ModelBenchmark[:] 0.000000
-- ::37.968 ModelBenchmark[:] 0.000000
-- ::37.968 ModelBenchmark[:]
-- ::37.968 ModelBenchmark[:] Toronto
-- ::37.968 ModelBenchmark[:] 7.900000
-- ::37.969 ModelBenchmark[:] 5.332200
-- ::37.969 ModelBenchmark[:]

不难看出,对字符串的过滤非常灵活,因此我们应该使用这种方法来过滤字符串。