美文网首页
中文 => 阿拉伯数字

中文 => 阿拉伯数字

作者: 绛紫哟 | 来源:发表于2017-12-29 11:00 被阅读28次

    中文转阿拉伯数字

    - (NSString *)arabicNumberalsFromChineseNumberals:(NSString *)arabic{
        arabic = [arabic stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"  ."]];
        // 筛除掉除数字外的文字
        arabic = [arabic stringByReplacingOccurrencesOfString:@"[^0123456789\u4e07\u5343\u767e\u96f6\u4e00\u4e24\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [arabic length])];
    
        NSLog(@"arabic=====%@",arabic);
        if ([self isAllContainWithString:arabic andContainString:@"1、2、3、4、5、6、7、8、9、0"]==YES)
        {
            return arabic;
        }
        else if (arabic.length==0)
        {
            return @"";
        }
        else
        {
    
            if ([self isAllContainWithString:arabic andContainString:@"零、一、二、两、三、四、五、六、七、八、九、十"] == NO) {
                
                NSCharacterSet *setToRemove =
                [[ NSCharacterSet characterSetWithCharactersInString:@"零一两二三四五六七八九十 "] invertedSet];
                NSString *newString = [[arabic componentsSeparatedByCharactersInSet:setToRemove] componentsJoinedByString:@""];
                arabic = newString;
            }
            NSLog(@"arabic=====%@",arabic);
            
            NSMutableDictionary * mdic =[[NSMutableDictionary alloc]init];
            
            [mdic setObject:[NSNumber numberWithInt:10000] forKey:@"万"];
            [mdic setObject:[NSNumber numberWithInt:1000] forKey:@"千"];
            [mdic setObject:[NSNumber numberWithInt:100] forKey:@"百"];
            [mdic setObject:[NSNumber numberWithInt:10] forKey:@"十"];
            
            [mdic setObject:[NSNumber numberWithInt:9] forKey:@"九"];
            [mdic setObject:[NSNumber numberWithInt:8] forKey:@"八"];
            [mdic setObject:[NSNumber numberWithInt:7] forKey:@"七"];
            [mdic setObject:[NSNumber numberWithInt:6] forKey:@"六"];
            [mdic setObject:[NSNumber numberWithInt:5] forKey:@"五"];
            [mdic setObject:[NSNumber numberWithInt:4] forKey:@"四"];
            [mdic setObject:[NSNumber numberWithInt:3] forKey:@"三"];
            [mdic setObject:[NSNumber numberWithInt:2] forKey:@"二"];
            [mdic setObject:[NSNumber numberWithInt:2] forKey:@"两"];
            [mdic setObject:[NSNumber numberWithInt:1] forKey:@"一"];
            [mdic setObject:[NSNumber numberWithInt:0] forKey:@"零"];
            
            //    NSLog(@"%@",mdic);
            
            BOOL flag=YES;//yes表示正数,no表示负数
            NSString * s=[arabic substringWithRange:NSMakeRange(0, 1)];
            if([s isEqualToString:@"负"]){
                flag=NO;
            }
            int i=0;
            if(!flag){
                i=1;
            }
            int sum=0;//和
            int num[20];//保存单个汉字信息数组
            for(int i=0;i<20;i++){//将其全部赋值为0
                num[i]=0;
            }
            int k=0;//用来记录数据的个数
            
            //如果是负数,正常的数据从第二个汉字开始,否则从第一个开始
            for(;i<[arabic length];i++){
                NSString * key=[arabic substringWithRange:NSMakeRange(i, 1)];
                int tmp=[[mdic valueForKey:key] intValue];
                num[k++]=tmp;
            }
            //将获得的所有数据进行拼装
            for(int i=0;i<k;i++){
                if(num[i]<10&&num[i+1]>=10){
                    sum+=num[i]*num[i+1];
                    i++;
                }else{
                    sum+=num[i];
                }
            }
            NSMutableString * result=[[NSMutableString alloc]init];;
            if(flag){//如果正数
                NSLog(@"%d",sum);
                result=[NSMutableString stringWithFormat:@"%d",sum];
            }else{//如果负数
                NSLog(@"-%d",sum);
                result=[NSMutableString stringWithFormat:@"-%d",sum];
            }
            
            
            NSLog(@"%s  %@", __func__, result);
            return result;
            
        }
        
        
    }
    

    中文转阿拉伯数字拓展

    1 判读是否为时间(到分)

    - (BOOL)isTimeStr:(NSString *)timeStr
    {
        NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyy MM dd HH mm"];
        NSString * nowDateStr = [formatter stringFromDate:[NSDate date]];
        NSArray * timeArray = [nowDateStr componentsSeparatedByString:@" "];
        
        NSLog(@"nowDateStr====%@",nowDateStr);
        NSString * recoginationYearStr = @"";
        NSString * recoginationMonthStr = @"";
        NSString * recoginationDayStr = @"";
        NSString * recoginationHourStr = @"";
        NSString * recoginationMinuteStr = @"";
        
        //年
        if ([timeStr containsString:@"年"])
        {
            NSString * yearStr = [timeStr componentsSeparatedByString:@"年"][0];
            if ([yearStr isEqualToString:@"今"])
            {
                recoginationYearStr = timeArray[0];
            }
            else if ([yearStr isEqualToString:@"明"])
            {
                int year = [timeArray[0] intValue]+1;
                recoginationYearStr = [NSString stringWithFormat:@"%d",year];
            }
            else if ([yearStr isEqualToString:@"去"])
            {
                int year = [timeArray[0] intValue]-1;
                recoginationYearStr = [NSString stringWithFormat:@"%d",year];
                
            }
            else if ([yearStr isEqualToString:@"前"])
            {
                int year = [timeArray[0] intValue]-2;
                recoginationYearStr = [NSString stringWithFormat:@"%d",year];
                
            }
            else if (yearStr.length==2)
            {
                
                NSString * arbStr = [self arabicNumberalsFromChineseNumberals:yearStr];
                if (arbStr.length == 2)
                {
                    recoginationYearStr = [NSString stringWithFormat:@"%@%@",[timeArray[0] substringToIndex:2],arbStr];
                    
                }
            }
            else if (yearStr.length==4)
            {
                NSString * arbStr = [self arabicNumberalsFromChineseNumberals:yearStr];
                if (arbStr.length == 4)
                {
                    recoginationYearStr = arbStr;
                    
                }
                
            }
            else
            {
                recoginationYearStr = @"";
            }
        }
        
        //月
        if ([timeStr containsString:@"月"])
        {
            NSString * monthFrontStr = [timeStr componentsSeparatedByString:@"月"][0];
            NSString * monthStr = monthFrontStr;
            if ([monthFrontStr containsString:@"年"])
            {
                monthStr = [monthFrontStr componentsSeparatedByString:@"年"][1];
            }
            
            if ([self isContainWithString:monthStr andContainString:@"上、上个"])
            {
                if ([timeArray[1] isEqualToString:@"01"] || [timeArray[1] isEqualToString:@"1"])
                {
                    recoginationMonthStr = @"12";
                    int year = [timeArray[0] intValue]-1;
                    recoginationYearStr = [NSString stringWithFormat:@"%d",year];
                    
                }
                else
                {
                    recoginationMonthStr = [NSString stringWithFormat:@"%02d",[timeArray[1] intValue]-1];
                    
                }
            }
            else if ([self isContainWithString:monthStr andContainString:@"这、这个、此"])
            {
                recoginationMonthStr = timeArray[1];
                
            }
            else if ([self isContainWithString:monthStr
                              andContainString:@"下、下个"])
            {
                if ([timeArray[1] isEqualToString:@"12"])
                {
                    recoginationMonthStr = @"01";
                    int year = [timeArray[0] intValue]+1;
                    recoginationYearStr = [NSString stringWithFormat:@"%d",year];
                    
                }
                else
                {
                    recoginationMonthStr = [NSString stringWithFormat:@"%02d",[timeArray[1] intValue]+1];
                    
                }
                
            }
            else
            {
                if ([self arabicNumberalsFromChineseNumberals:monthStr].length==1)
                {
                    recoginationMonthStr = [self arabicNumberalsFromChineseNumberals:monthStr];
                    
                }
                else
                {
                    recoginationMonthStr = [self arabicNumberalsFromChineseNumberals:monthStr];
                    
                }
            }
            
        }
        
        //日 号
        if ([self isContainWithString:timeStr andContainString:@"日、号"])
        {
            NSArray * array = [timeStr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"年月日号"]];
            NSString * dayStr = @"";
            if (array.count>=2)
            {
                dayStr = array[array.count-2];
            }
            else
            {
                dayStr = array[1];
            }
            recoginationDayStr = [self arabicNumberalsFromChineseNumberals:dayStr];
        }
        
        //点 时
        if ([self isContainWithString:timeStr andContainString:@"点、时"])
        {
            NSArray * array = [timeStr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"年月日号点时"]];
            NSString * hourStr = @"";
            if (array.count>=2) {
                hourStr = array[array.count-2];
            }
            else
            {
                hourStr = array[0];
            }
            int hourValue = 0;
            if ([hourStr containsString:@"下午"] || [hourStr containsString:@"晚上"])
            {
                hourValue = [[self arabicNumberalsFromChineseNumberals:hourStr] intValue];
                hourValue = hourValue>12?hourValue:hourValue+12;
            }
            else
            {
                hourValue = [[self arabicNumberalsFromChineseNumberals:hourStr] intValue];
            }
            if (hourStr.length==0)
            {
                recoginationHourStr = @"";
            }
            else
            {
                recoginationHourStr = [NSString stringWithFormat:@"%02d",hourValue];
                
            }
            
        }
        
        //分钟
        if ([self isContainWithString:timeStr andContainString:@"分、点半"])
        {
            NSArray * array = [timeStr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"年月日号点时"]];
            NSString * minuteStr = [array lastObject];
            
            if ([minuteStr containsString:@"分"]) {
                minuteStr = [minuteStr stringByReplacingOccurrencesOfString:@"分" withString:@""];
            }
            recoginationMinuteStr = [NSString stringWithFormat:@"%02d",[[self arabicNumberalsFromChineseNumberals:minuteStr] intValue]];
            
        }
        
        if (recoginationYearStr.length>0 || recoginationMonthStr.length>0 || recoginationDayStr.length>0 || recoginationHourStr.length>0 || recoginationMinuteStr.length>0 || [self isContainWithString:timeStr andContainString:@"前天、昨天、今天、明天"])
        {
            return YES;
        }
        else
        {
            return NO;
        }
    }
    

    2 文字转时间(年月日时分)

    - (NSString *)stringWithTimeStr:(NSString *)timeStr
    {
        NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyy MM dd HH mm"];
        NSString * nowDateStr = [formatter stringFromDate:[NSDate date]];
        NSArray * timeArray = [nowDateStr componentsSeparatedByString:@" "];
        
        NSLog(@"nowDateStr====%@",nowDateStr);
        NSString * recoginationYearStr = @"";
        NSString * recoginationMonthStr = @"";
        NSString * recoginationDayStr = @"";
        NSString * recoginationHourStr = @"";
        NSString * recoginationMinuteStr = @"";
        
        //年
        if ([timeStr containsString:@"年"])
        {
            NSString * yearStr = [timeStr componentsSeparatedByString:@"年"][0];
            if ([yearStr isEqualToString:@"今"])
            {
                recoginationYearStr = timeArray[0];
            }
            else if ([yearStr isEqualToString:@"明"])
            {
                int year = [timeArray[0] intValue]+1;
                recoginationYearStr = [NSString stringWithFormat:@"%d",year];
            }
            else if ([yearStr isEqualToString:@"去"])
            {
                int year = [timeArray[0] intValue]-1;
                recoginationYearStr = [NSString stringWithFormat:@"%d",year];
                
            }
            else if ([yearStr isEqualToString:@"前"])
            {
                int year = [timeArray[0] intValue]-2;
                recoginationYearStr = [NSString stringWithFormat:@"%d",year];
                
            }
            else if (yearStr.length==2)
            {
                
                NSString * arbStr = [self arabicNumberalsFromChineseNumberals:yearStr];
                if (arbStr.length == 2)
                {
                    recoginationYearStr = [NSString stringWithFormat:@"%@%@",[timeArray[0] substringToIndex:2],arbStr];
                    
                }
            }
            else if (yearStr.length==4)
            {
                NSString * arbStr = [self arabicNumberalsFromChineseNumberals:yearStr];
                if (arbStr.length == 4)
                {
                    recoginationYearStr = arbStr;
                    
                }
                
            }
            else
            {
                recoginationYearStr = @"";
            }
        }
        
        //月
        if ([timeStr containsString:@"月"])
        {
            NSString * monthFrontStr = [timeStr componentsSeparatedByString:@"月"][0];
            NSString * monthStr = monthFrontStr;
            if ([monthFrontStr containsString:@"年"])
            {
                monthStr = [monthFrontStr componentsSeparatedByString:@"年"][1];
            }
            
            if ([self isContainWithString:monthStr andContainString:@"上、上个"])
            {
                if ([timeArray[1] isEqualToString:@"01"] || [timeArray[1] isEqualToString:@"1"])
                {
                    recoginationMonthStr = @"12";
                    int year = [timeArray[0] intValue]-1;
                    recoginationYearStr = [NSString stringWithFormat:@"%d",year];
                    
                }
                else
                {
                    recoginationMonthStr = [NSString stringWithFormat:@"%02d",[timeArray[1] intValue]-1];
                    
                }
            }
            else if ([self isContainWithString:monthStr andContainString:@"这、这个、此"])
            {
                recoginationMonthStr = timeArray[1];
                
            }
            else if ([self isContainWithString:monthStr
                              andContainString:@"下、下个"])
            {
                if ([timeArray[1] isEqualToString:@"12"])
                {
                    recoginationMonthStr = @"01";
                    int year = [timeArray[0] intValue]+1;
                    recoginationYearStr = [NSString stringWithFormat:@"%d",year];
                    
                }
                else
                {
                    recoginationMonthStr = [NSString stringWithFormat:@"%02d",[timeArray[1] intValue]+1];
                    
                }
                
            }
            else
            {
                if ([self arabicNumberalsFromChineseNumberals:monthStr].length==1)
                {
                    recoginationMonthStr = [NSString stringWithFormat:@"0%@",[self arabicNumberalsFromChineseNumberals:monthStr]];
    
                }
                else
                {
                    recoginationMonthStr = [self arabicNumberalsFromChineseNumberals:monthStr];
    
                }
            }
            
        }
        
        //日 号
        if ([self isContainWithString:timeStr andContainString:@"日、号"])
        {
            NSArray * array = [timeStr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"年月日号"]];
            NSString * dayStr = @"";
            if (array.count>=2)
            {
                dayStr = array[array.count-2];
            }
            else
            {
                dayStr = array[1];
            }
            recoginationDayStr = [NSString stringWithFormat:@"%02d",[[self arabicNumberalsFromChineseNumberals:dayStr] intValue]];
        }
        
        //点 时
        if ([self isContainWithString:timeStr andContainString:@"点、时"])
        {
            NSArray * array = [timeStr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"年月日号点时"]];
            NSString * hourStr = @"";
            if (array.count>=2) {
                hourStr = array[array.count-2];
            }
            else
            {
                hourStr = array[0];
            }
            int hourValue = 0;
            if ([hourStr containsString:@"下午"] || [hourStr containsString:@"晚上"])
            {
                hourValue = [[self arabicNumberalsFromChineseNumberals:hourStr] intValue];
                hourValue = hourValue>12?hourValue:hourValue+12;
            }
            else
            {
                hourValue = [[self arabicNumberalsFromChineseNumberals:hourStr] intValue];
            }
            if (hourStr.length==0)
            {
                recoginationHourStr = @"";
            }
            else
            {
                recoginationHourStr = [NSString stringWithFormat:@"%02d",hourValue];
                
            }
            
        }
        
        //分钟
        if ([self isContainWithString:timeStr andContainString:@"分、点半"])
        {
            NSArray * array = [timeStr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"年月日号点时"]];
            NSString * minuteStr = [array lastObject];
            
            if ([minuteStr containsString:@"分"]) {
                minuteStr = [minuteStr stringByReplacingOccurrencesOfString:@"分" withString:@""];
            }
            recoginationMinuteStr = [NSString stringWithFormat:@"%02d",[[self arabicNumberalsFromChineseNumberals:minuteStr] intValue]];
            
        }
        if (recoginationYearStr.length==0) {
            recoginationYearStr = timeArray[0];
        }
        if (recoginationMonthStr.length==0) {
            recoginationMonthStr = timeArray[1];
        }
        if (recoginationDayStr.length==0) {
            recoginationDayStr = timeArray[2];
        }
        if (recoginationHourStr.length==0) {
            recoginationHourStr = timeArray[3];
        }
        if (recoginationMinuteStr.length==0) {
            if ([timeStr containsString:@"点"])
            {
                recoginationMinuteStr = @"00";
            }
            else
            {
                recoginationMinuteStr = timeArray[4];
                
            }
        }
        
        
        
        NSString * endTime = [NSString stringWithFormat:@"%@年%@月%@日———%@:%@",recoginationYearStr,recoginationMonthStr,recoginationDayStr,recoginationHourStr,recoginationMinuteStr];
        
        NSDateFormatter * formatterStr = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyy年MM月dd日———HH:mm:ss"];
        NSDate * endDate = [formatter dateFromString:[NSString stringWithFormat:@"%@:00",endTime]];
        NSLog(@"endDate====%@",endDate);
        if ([timeStr containsString:@"前天"])
        {
            NSDate * endingDate = [NSDate dateWithTimeInterval:-2*60*60*24 sinceDate:endDate];
            endTime = [formatter stringFromDate:endingDate];
        }
        else if ([timeStr containsString:@"昨天"])
        {
            NSDate * endingDate = [NSDate dateWithTimeInterval:-60*60*24 sinceDate:endDate];
            endTime = [formatter stringFromDate:endingDate];
            
        }
        else if ([timeStr containsString:@"明天"])
        {
            NSDate * endingDate = [NSDate dateWithTimeInterval:60*60*24 sinceDate:endDate];
            endTime = [formatter stringFromDate:endingDate];
            
        }
        else if ([timeStr containsString:@"后天"])
        {
            NSDate * endingDate = [NSDate dateWithTimeInterval:2*60*60*24 sinceDate:endDate];
            endTime = [formatter stringFromDate:endingDate];
            
        }
        endTime = [endTime substringToIndex:19];
        
        return endTime;
    }
    ···
    

    相关文章

      网友评论

          本文标题:中文 => 阿拉伯数字

          本文链接:https://www.haomeiwen.com/subject/cskigxtx.html