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);
});
}
}
结果: