Java 正则表达式

ns7381 2014-05-13 09:01:37
有一类似这样的0,1,2组成的字符串 s = "0001200011002010",我想匹配出其中是否含有长度为6的含有4个0,2个1的字符串,正则表达式该怎么写,急求答案,谢谢
...全文
772 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tony4geek 2014-05-14
  • 打赏
  • 举报
回复
像楼上一样把。。
oh_Maxy 版主 2014-05-14
  • 打赏
  • 举报
回复
引用 4 楼 oh_Maxy 的回复:
配合正则式,有点逻辑判断:

        // 目标串,稍微扩展了下
        String s = "00012000110020100000";
        // 只包含0、1的匹配
        Pattern p01 = Pattern.compile("[01]{6}");
        Matcher m = p01.matcher(s);
        // 先找到长度为6的0、1串
        while (m.find()) {
            String strTmp = m.group();
            // 按位拆分,将6位数相加,和为2,则表示有4个0,2个1
            int sum = 0;
            for (int i = 0; i < strTmp.length(); i++) {
                sum += Integer.valueOf(strTmp.substring(i, i + 1));
            }
            if (sum == 2) {
                System.out.println(s + "字符串中,由4个0,2个1组成的字串为:" + strTmp);
            } else {
                System.out.println("字符串" + strTmp + "中,0与1的个数不符合要求");
            }
        }
修改下判断,用字符的个数比较直接:

            String strTmp = m.group();
            // 按位拆分,判断字符0的个数
            int sum = 0;
            for (int i = 0; i < strTmp.length(); i++) {
                if ('0' == strTmp.charAt(i)) {
                    sum++;
                }
            }
            // 如果有4个0,则说明串符合要求
            if (sum == 4) {
                System.out.println(s + "字符串中,由4个0,2个1组成的字串为:" + strTmp);
            } else {
                System.out.println("字符串" + strTmp + "中,0与1的个数不符合要求");
            }
oh_Maxy 版主 2014-05-14
  • 打赏
  • 举报
回复
配合正则式,有点逻辑判断:

        // 目标串,稍微扩展了下
        String s = "00012000110020100000";
        // 只包含0、1的匹配
        Pattern p01 = Pattern.compile("[01]{6}");
        Matcher m = p01.matcher(s);
        // 先找到长度为6的0、1串
        while (m.find()) {
            String strTmp = m.group();
            // 按位拆分,将6位数相加,和为2,则表示有4个0,2个1
            int sum = 0;
            for (int i = 0; i < strTmp.length(); i++) {
                sum += Integer.valueOf(strTmp.substring(i, i + 1));
            }
            if (sum == 2) {
                System.out.println(s + "字符串中,由4个0,2个1组成的字串为:" + strTmp);
            } else {
                System.out.println("字符串" + strTmp + "中,0与1的个数不符合要求");
            }
        }
ilmlife 2014-05-14
  • 打赏
  • 举报
回复
引用 2 楼 rui888 的回复:
0 和 1 是连续的吗
看这意思 估计不是连续的 想了想 没想到啥好办法
tony4geek 2014-05-14
  • 打赏
  • 举报
回复
0 和 1 是连续的吗
m3621552 2014-05-14
  • 打赏
  • 举报
回复
个人觉得貌似不能直接用正则,暂时能想到的方法是一步一步判断: 1.得到字符串S后,以“2”进行分段(包含2的肯定是不符合),假设分了n个段 2.对每一段的长度进行判断,找到所有符合长度大于等于6的 3.对每一个长度符合的字符串从第一位开始一次进行6位长度的截取字符串进行判断:(假如这个字段有8位,那应该有1-6、2-7、3-8三个截取字符串) a.是否这个6位的字符串仅包含数字1和0(如果你能确定一定是这样的,那当然就不用判断了) b.数字1的数量是否为2 a、b均符合的就可判断为符合条件的 =。= 想不到直接能判断的正则~~就笨办法来了
ns7381 2014-05-14
  • 打赏
  • 举报
回复
不行啊,,如果String s = "0000100010000";还是匹配不到啊

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧