中文 => 阿拉伯数字
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;
}
···