输入开始和结束编号生成所有编号且自动补0

文章介绍了DeviceNoUtil类,包含方法如getSameStr用于获取两个字符串中最长的相同子串,getDeviceNoList根据给定范围生成设备编号列表,以及getRange函数生成整数序列。示例展示了如何在YSNM编号系列中提取特定区间内的设备编号。
摘要由CSDN通过智能技术生成
import cn.hutool.core.util.StrUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * @author liwei
 * @date 2024/3/16 12:00
 */
public class DeviceNoUtil {
	/**
	* 获取最长相同字符串
	*/
    public static String getSameStr(String str1, String str2) {
        int str1s, substr1len;
        String substr1;
        String str = null;
        boolean isSearched = false;
        int l = str1.length();
        int n = 0;

        // 累加,计算出str1字符串一共有n种可能的子字符串组合
        while (l >= 0) {
            n = n + l;
            l--;
        }
        // 从这n种中寻找可能的字符串并截取出来与str2比较
        for (substr1len = str1.length(); substr1len >= 1; substr1len--) {
            for (str1s = 0; str1s <= (str1.length() - substr1len); str1s++) {
                substr1 = str1.substring(str1s, (str1s + substr1len));
                if (str2.indexOf(substr1) > -1) {
//                    System.out.println("最长相同字符串:" + substr1);
                    str = substr1;
                    isSearched = true;
                }
            }
            if (isSearched) {
                break;
            }
        }
        return str;
    }

    /**
     * 获取编号列表
     * @param str1 开始编号
     * @param str2 结束编号
     * @return
     */
    public static List<String> getDeviceNoList(String str1,String str2){
        String sameStr = getSameStr(str1,str2);
        String left1 = str1.substring(sameStr.length());
        String left2 = str2.substring(sameStr.length());
        List<Integer> range = getRange(Integer.parseInt(left1), Integer.parseInt(left2));
        List<String> strList = new ArrayList<>();
        range.stream().forEach( e-> {
            strList.add(sameStr+""+ StrUtil.padPre(e.toString(), left1.length(), '0'));
        });
        return strList;
    }

    /**
     * 获取两个整数之间的所有数列表
     * @param start 开始数
     * @param end 终止数
     * @return
     */
    public static List<Integer> getRange(int start, int end) {
        List<Integer> range = new ArrayList<>();
        for (int i = start; i <= end; i++) {
            range.add(i);
        }
        return range;
    }

    public static void main(String[] args) {
        String str1 = "YSNM0000191001";
        String str2 = "YSNM0000191044";
        List<String> deviceNoList = getDeviceNoList(str1, str2);
        deviceNoList.stream().forEach(e->{
            System.out.println(e);
        });
    }
}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值