当前位置: 代码迷 >> Java相关 >> Java 正则表达式解决方案
  详细解决方案

Java 正则表达式解决方案

热度:25   发布时间:2016-04-22 21:09:18.0
Java 正则表达式
有一类似这样的0,1,2组成的字符串 s = "0001200011002010",我想匹配出其中是否含有长度为6的含有4个0,2个1的字符串,正则表达式该怎么写,急求答案,谢谢
------解决方案--------------------
个人觉得貌似不能直接用正则,暂时能想到的方法是一步一步判断:
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均符合的就可判断为符合条件的 

=。=  想不到直接能判断的正则~~就笨办法来了

------解决方案--------------------
配合正则式,有点逻辑判断:

        // 目标串,稍微扩展了下
        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的个数不符合要求");
            }
        }

------解决方案--------------------
像楼上一样把。。