三位一组 生成一个部门下的子部门的EnCode,要求根据已有子部门的Encode增长+1,或填空中间空值.如:
String str = "001";//父类部门
String s[] = {"001001",001003","001004", "001005","001001001" };//子部门编码
则要生产的code为001002如:
String str = "001";//父类部门
String s[] = {"001001",001002",001003","001004", "001005","001001001" };//子部门编码
则要生产的code为001006没头绪,请各位高手指点!

解决方案 »

  1.   

    I do not think it's so hard. Here is my algorithm:1. get each element in s, ends at s[s.length-1].
    2. long l =Long.parseLong(s[i]) - Long.parseLong(s[i-1])
    3. decide which number you should insert, according to l. For instance:
       if l == 2, it means there should be one code between s[i] and s[i-1].
       if l == 1, it means you need to add one at the end of this array.
       
      

  2.   

    搞了 半天才弄出下面的代码,有点长
    public String getCode(){
    String str = "001001"; String s[] = { "001", "001001","001002","001003","001004", "001005","001001001","001001003" ,"001001004"  };
    List it =new ArrayList(); //子部门集合
    for (int i = 0; i < s.length; i++) {

    String st="";
    if (str.length() == 3) {

    st = s[i].substring(0, 3);
    }
    else if (str.length() == 6 && s[i].length() > str.length()) {
    st = s[i].substring(0, 6);
    }
    else if (str.length() == 9 && s[i].length() > str.length()) {
    st = s[i].substring(0, 9);
    }
    else if (str.length() == 12 && s[i].length() > str.length()) {
    st = s[i].substring(0, 12);
    }
    else if (str.length() == 15 && s[i].length() > str.length()) {
    st = s[i].substring(0, 15);
    }
     if (str.equals(st) && s[i].length()==str.length()+3 ) {//筛选子类
    Integer zstr=Integer.valueOf(s[i].substring(str.length(), str.length()+3));//转换为Integer类型
    it.add(zstr);//添加子类
    }
    }
    int num=0;
    String stri="";
    String code="";
    for (int k = 0; k < it.size(); k++) {

    int inte =((Integer)it.get(k)).intValue();
    int inte2 =0;
    if(k<it.size()-1){
     inte2 =((Integer)it.get(k+1)).intValue();
    }

    if(inte2-inte>1){//插空隙
    num=inte+1;
    stri=String.valueOf(num);

    if(stri.length()==3){
    code=str+stri;
    return code;
    }else if(stri.length()==2){
    code=str+"0"+stri;
    return code;

    }else if(stri.length()==1){
    code=str+"00"+stri;
    return code;
    }
    }else{
    num=((Integer)it.get(it.size()-1)).intValue()+1;//code+1
    stri=String.valueOf(num);
    if(stri.length()==3){
    code=str+stri;
    return code;
    }else if(stri.length()==2){
    code=str+"0"+stri;
    return code;

    }else if(stri.length()==1){
    code=str+"00"+stri;
    return code;
    }
    }

    }
    return code;
    }