对于一段形如:1 , -1~3 , 1~15x3 的输入,
输入会依据以下规则:
a、所有输入为整数;
b、“,”为分隔符;
c、“~”表示一个区间,比如“-1~3”表示-1到3总共5个整数,同时“~”前的数小于“~”后的数;
d、“x”表示步长,“x3”指每3个整数取一个,比如“1~15x3”表示1,4,7,10,13;根据以上得到的结果进行打印,打印的规则为:
a、所有得到的整数按从小到大排列,以“,”分隔,不计重复;
b、每行最多显示3个整数;
c、如果两个整数是连续的,可以放在同一行,否则自动换行。例如对于输入“1 , -1~3 , 1~15x3”的输出结果为:
-1,0,1,
2,3,4,
7,
10,
13

解决方案 »

  1.   


    package Test;import java.util.ArrayList;
    import java.util.List;public class Test {
    private static List<Integer> rsl = new ArrayList<Integer>(); public static void main(String[] args) throws Exception {
    String str = "-1~3x2,4,6~10";
    String[] strs = str.split(",");
    for(int i = 0; i<strs.length; i++){
    doIt(strs[i]);
    }
    for(int i = 0;i<rsl.size();i++){
    System.out.print(rsl.get(i));
    try{
    if(rsl.get(i+1)-rsl.get(i) != 1){
    System.out.println();
    }
    }catch(IndexOutOfBoundsException iobe){

    }
    }
    }

    public static void doIt(String str){
    String s = str.split("~")[0];
    String e = str.indexOf("~")>-1?str.split("~")[1]:s;
    int n = 1;
    if(e.indexOf("x")>-1){
    n = Integer.parseInt(e.split("x")[1]);
    e = e.split("x")[0];
    }
    for(int i = Integer.parseInt(s);i<Integer.parseInt(e)+1;i=i+n){
    rsl.add(i);
    }
    }
    }
      

  2.   

    先split(","),再indexof("x") indexof("~") 找到start,end,tmp..for(int i=start;i<end;i+=tmp)