现在的位置: 首页 > 综合 > 正文

NSCharacterSet使用方法

2017年12月08日 ⁄ 综合 ⁄ 共 2744字 ⁄ 字号 评论关闭
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    [self test];
    
    // 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" );
}

- (void)test
{
    // 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])
            ;
    }    

    
    
}

void dumpCharacterSet( NSString *name )
{
	unichar idx;
	NSCharacterSet *cset = [NSCharacterSet performSelector: NSSelectorFromString(name)];
    
	printf("Character set (0-127): %s\n7-Bit: ", [name UTF8String]);
    
	for( idx = 0; idx < 256; idx++ )
	{
		if ( 128 == 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");
}

使用xcode4.0编译,有错误,说

void dumpCharacterSet( NSString *name )方法有冲突,但是呢,,还能运行。。。

xcode4.0的bug

抱歉!评论已关闭.