两个起始不同,但是长度相同的数正则表达式生成

 package com.xx925.inet;

import java.util.regex.Pattern;

public class TestPattern {
 public static void main(String[] args) {
  String[] str = { "1", "1", "1" ,"1"};
  String[] str2 = { "2", "2", "2" ,"0"};
  String pattern = getPattern(str, str2);
  System.out.println(pattern);
  for (int i = 1000; i <= 10000; i++) {
   System.out.print(Pattern.matches(pattern, String.valueOf(i)));
   if (i == 1110 || i == 2220) {
    System.out.println();
   }
  }
 }

 public static String getPattern(String[] startNum, String[] endNum) {
  StringBuffer buffer = new StringBuffer();
  String[] start = getNum(startNum);
  String[] end = getNum(endNum);
  int flag = Integer.parseInt(startNum[0])-Integer.parseInt(endNum[0]);
  // 234-456 [3-3][0-9]{2} 2[4-9][0-9]{1} 23[4-9] 4[0-4][0-9] 45[0-6]
  for (int i = 0; i < start.length; i++) {
   if (i == start.length - 1) {
    buffer.append(start[0]).append("([").append(startNum[i])
      .append("-9]").append(")|");
   } else if (i == 0&&flag>1) {
    buffer.append("([").append(Integer.parseInt(startNum[i]) + 1)
      .append("-").append(Integer.parseInt(endNum[i]) - 1)
      .append("][0-9]").append("{").append(
        (start.length - i - 1)).append("})|");
   } else if(i==0&&flag<=1){
    //这里不能做任何操作,但是必须存在
   }else{
    buffer.append(start[start.length - i - 1]).append("([").append(
      Integer.parseInt(startNum[i]) + 1).append("-9]").append(
      "[0-9]").append("{").append((start.length - i - 1))
      .append("})|");
   }
  }
  for (int i = 1; i < end.length; i++) {
   if (i == end.length - 1) {
    buffer.append(end[0]).append("([0-").append(endNum[i]).append(
      "]").append(")|");
   } else {
    buffer.append(end[endNum.length - i - 1]).append("([0-")
      .append(Integer.parseInt(endNum[i]) - 1).append("]")
      .append("[0-9]").append("{").append(
        (endNum.length - i - 1)).append("})|");
   }

  }
  return buffer.toString().substring(0, buffer.toString().length() - 1);
 }

 private static String[] getNum(String[] startNum) {
  String[] start = new String[startNum.length];
  for (int i = 0; i < startNum.length; i++) {
   StringBuffer buf = new StringBuffer();
   for (int j = 0; j < startNum.length - i - 1; j++) {
    buf.append(startNum[j]);
   }
   start[i] = buf.toString();
  }
  return start;
 }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值