Dividere la stringa in elenco di numeri interi con virgola e “-“

Esiste un modo semplice per analizzare la stringa seguente in Elenco di numeri interi:

String s = "1,2,5-9,11,12" // expected values list: [1,2,5,6,7,8,9,11,12] List values = magicallyGetListFromString(s); 

Mi stavo chiedendo se c’è un modo semplice per farlo, piuttosto che scriverlo da solo.

 List out=new ArrayList(); String numbers[]=s.split(","); for(String part:numbers){ if(part.contains("-"){ int a=Integer.parseInt(part.split("-")[0]); int b=Integer.parseInt(part.split("-")[1]); while(a<=b){ out.add(a++); } }else{ out.add(Integer.parseInt(part)); } } 

Questo dovrebbe funzionare:

 public class StringMagic { public static void main(String[] args) { String s = "1,2,5-9,11,12"; // expected values list: [1,2,5,6,7,8,9,11,12] List values = magicallyGetListFromString(s); for (Integer integer : values) { System.out.println(integer); } } public static List magicallyGetListFromString(String s) { List numberList = new ArrayList(); String[] numbers = s.split(","); for (String string : numbers) { if (!string.contains("-")) { numberList.add(Integer.parseInt(string)); } else { String[] limits = string.split("-"); int bottomLimit = Integer.parseInt(limits[0]); int upperLimit = Integer.parseInt(limits[1]); for(int i = bottomLimit; i <= upperLimit; i++) { numberList.add(i); } } } return numberList; } } 
 public static void main(String[] args) { String str = "1,2,5-9,11,12,19-21"; String[] val = str.split(","); List l = new ArrayList(); for (String s : val) { if (s.contains("-")) { String[] strVal = s.split("-"); int startVal = Integer.parseInt(strVal[0]); int endVal = Integer.parseInt(strVal[1]); for (int i = startVal; i <= endVal; i++) { l.add(i); } } else { l.add(Integer.parseInt(s)); } } for (int j : l) { System.out.println(j); } } 

O / P: 1 2 5 6 7 8 9 11 12 19 20 21

La magia che stai guardando

 public static List magicallyGetListFromString(String s){ String[] str=s.split(","); List result=new ArrayList(); for(String i:str){ if(i.contains("-")){ String[] ss=i.split("-"); int lower= Integer.parseInt(ss[0]); int upper= Integer.parseInt(ss[1]); for(int j=lower;j<=upper;j++){ result.add(j); } }else { result.add(Integer.parseInt(i)); } } return result; } 

Risultato:

 [1, 2, 5, 6, 7, 8, 9, 11, 12]