中文 => 阿拉伯数字

2017-12-29  本文已影响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;
}
···
上一篇下一篇

猜你喜欢

热点阅读