So I have this \"list\" of ints. It could be a Vector, int[], List, whatever.
My goal though is to sort the
If you use a TreeSet, I have a (longish) one-liner for you (assuming items is the TreeSet):
final String[] arr =
items.toString() // string representation
.replaceAll("\\D+", " ") // replace all non digits with spaces
.trim() // trim ends
.split(" "); // split by spaces
Test code:
Set items = new TreeSet(Arrays.asList(5, 1, 2, 11, 3));
// insert above code here
System.out.println(Arrays.toString(arr));
Output:
[1, 2, 3, 5, 11]
EDIT:
OK, here is a different version that works with the int array directly. But unfortunately it's not a one-liner. However, it does keep duplicates and it's probably faster
EDIT again:
Bug fixed and negative numbers supported, as requested:
EDIT once more: only one regex pass and no trim
final int[] in = { 5, 1, 2, 11, 3, 2, -5 }; // with duplicate
Arrays.sort(in);
final String[] out =
Arrays.toString(in)
.replaceAll("(?:\\[?)([-\\d]+)(?:\\]?)", "$1") // just remove [ and ]
.split("\\s*,\\s*"); // split by comma
System.out.println(Arrays.toString(out));
Output:
[-5, 1, 2, 2, 3, 5, 11]
Or completely without regex (apart from split()), but with one more step added:
final int[] in = { 5, 1, 2, 11, 3, 2, -5 }; // with duplicate
Arrays.sort(in);
final String stringRep = Arrays.toString(in);
final String[] out =
stringRep.substring(1, stringRep.length() - 1).split("\\s*,\\s*");
System.out.println(Arrays.toString(out));
Output:
[-5, 1, 2, 2, 3, 5, 11]
Update: stripped whitespace from my last two solutions, hope you're happy now :-)