美文网首页
判断字符串中的数字是否相同,连续

判断字符串中的数字是否相同,连续

作者: huanghy | 来源:发表于2016-11-23 10:01 被阅读393次

最近几天在写pin code和指纹登录功能,一直没有时间总结技术,今天终于有点时间了。

我们的pin code的规则如下图所示:

屏幕快照 2016-11-23 上午8.43.20.png

我在网上找了这方面的正则,可惜没有,看来正则表达式不是万能的啊,哈哈!不过还是有收获的,我找到了一个判断数字是否相同的表达式,用着挺爽的。"^(?=.\d+)(?!.?([\d])\1{4})[\d]{5}$",贴出来与大家共享。
先说一下我对这个问题的解决思路:

  1. 我们先进行判重,怎么进行判重呢,首先我们需要把字符串中的数字切割成单独的数字,放入到数组中,这样你是不是有点思路了呢?我们可以利用for循环,用数组中的第一个元素和其他元素一一进行比较,如果有不相等的说明这个字符串的数字是不相同的。
    1. 再判断数字是否连续的,这个需要我们分成两部分来判断:递增连续、递减连续。
      2.1 判断递增连续,我们可以利用for循环进行操作,如果i>0在里面对arr[i]和arr[i-1] + 1 进行判断是否相等,如果有一次不相等,就说明这个字符串不是连续递增的。判断递减也可以依同样的方式进行解决。
      2.2 判断递减连续,利用for循环进行操作,如果i>0在里面对arr[i]和arr[i-1] - 1 进行判断是否相等,如果有一次不相等,就说明这个字符串不是连续递减的。
      下面是我对其进行的代码实现:
      第一种方法,使用一个临时int变量j,来判断比较了多少次,如果比较了arr.count - 1次,就能说明全部比较完成了。

      +(BOOL)checkPincode:(NSString*)pincode
       {
           BOOL isTure = NO;//不符合规则,pincode是相同的或连续的
           NSString *pincodeRegex = @"^(?=.*\\d+)(?!.*?([\\d])\\1{4})[\\d]{5}$";
           NSPredicate *pincodePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pincodeRegex];
      
           NSMutableArray * arr = [NSMutableArray arrayWithCapacity:0];
         if ([pincodePredicate evaluateWithObject:pincode]) {
      
           // 遍历字符串,按字符来遍历。每个字符将通过block参数中的substring传出
             [pincode enumerateSubstringsInRange:NSMakeRange(0, pincode.length) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
       //将遍历出来的字符串添加到数组中
             [arr addObject:substring];
      
           }];
      
         BOOL isInscend = [CommonService judgeInscend:arr];
         BOOL isDescend = [CommonService judgeDescend:arr];
           if ( !isInscend && !isDescend) {
             isTure = YES;
           }
      
         }
           return issuer;
       }
      
       + (BOOL)judgeInscend:(NSArray *)arr{
         //递增12345
         int j = 0;
         for (int i = 0; i<arr.count; i++) {
             if (i>0) {
                 int num = [arr[i] intValue];
                 int num_ = [arr[i-1] intValue] +1;
                 if (num == num_) {
                     j++;
               }
           }
         }
      
         if (j == arr.count - 1) {
             return YES;
         }
      
         return NO;
       }
      
       + (BOOL)judgeDescend:(NSArray *)arr{
         //递减54321
         int j=0;//计数归零,用于递减判断
         for (int i = 0; i<arr.count; i++) {
             if (i>0) {
                 int num = [arr[i] intValue];
                 int num_ = [arr[i-1] intValue]-1;
                 if (num == num_) {
                     j++;
                 }
             }
         }
         if (j == arr.count - 1) {
             return YES;
         }
          returnNO;
       }
       //判断是否相等
       + (BOOL)judgeEqual:(NSArray *)arr{
           int j=0;
           int firstNum = [arr[0] intValue];
           for (int i = 0; i<arr.count; i++) {
           if (firstNum == [arr[i] intValue]) {
                 j++;
           }
        }
       if (j == arr.count - 1) {
           return YES;
       }
       return NO;
       }
      

第二种方法,用BOOL进行判断,只要有一个不相等的,就break结束循环,这个是最方便和也是最容易理解的

//判断是否相等
+ (BOOL)judgeEqual:(NSArray *)arr{
    BOOL flag = YES;
    int firstNum = [arr[0] intValue];
    for (int i = 0; i<arr.count; i++) {
        if (firstNum != [arr[i] intValue]) {
            flag = NO;
            break;
        }
    }
    return flag;
}
+ (BOOL)judgeInscend:(NSArray *)arr{
    //递增12345
    BOOL flag = YES;
    for (int i = 0; i<arr.count; i++) {
        if (i>0) {
            int num = [arr[i] intValue];
            int num_ = [arr[i-1] intValue] +1;
            if (num != num_) {
                flag = NO;
                break;
            }
        }
    }
    
    return flag;
}
+ (BOOL)judgeDescend:(NSArray *)arr{
    //递减54321
    BOOL flag = YES;
    for (int i = 0; i<arr.count; i++) {
        if (i>0) {
            int num = [arr[i] intValue];
            int num_ = [arr[i-1] intValue]-1;
            if (num != num_) {
                flag = NO;
                break;
            }
        }
    }
    return flag;
}

相关文章

  • 判断字符串中的数字是否相同,连续

    最近几天在写pin code和指纹登录功能,一直没有时间总结技术,今天终于有点时间了。 我们的pin code的规...

  • 常用算法

    求最大公约数 判断字符串是否为回文串 判断数字是否为质数 判断数组中是否存在相同元素 求阶乘 二进制中1的个数

  • iOS【NSString基本方法】

    判断字符串是否包含数字 判断字符串是否包含英文字母 判断字符串是否包含数字与字母 去掉首尾空格字符 判断是否为空 ...

  • js判断字符串中是否有数字和字母

    js判断字符串中是否有数字和字母

  • Isdigit and isalnum

    isdigit判断字符串是否全由数字组成 isalnum判断字符串是否全由数字和字母组成

  • JS常用字符串处理轮子

    一、字符串限制 判断字符串是否全部都是数字 判断字符串是否全部都是字母 判断字符串是否是字符与数字 字符串前后空格...

  • java 正则 常用

    1、判断字符串 是否为纯字母 2、判断字符串 是否为纯数字 3、判断字符串 是由字母和数字组成 4、判断字符串 是...

  • 2018-09-19

    字符串的常用方法 S.isdigit() 判断字符串中是否全为数字 S.isalpha() 判断字...

  • OC中常用的String类别

    获取Url中参数对应的value 判断字符串中是否有中文 判断是否为QQ号 判断是否为手机号 是否是数字 是否是身...

  • 2019-08-24 Java字符串处理

    我使用的contains方法来判断一个字符串中是否包含某个数字,将数字转为字符串,然后判断是否包含。转换为字符串的...

网友评论

      本文标题:判断字符串中的数字是否相同,连续

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