Partition { public static Partition fromString(String strForm) { if (strForm == null || strForm.isEmpty()) throw new IllegalArgumentException("null or empty string provided"); Partition p = new Partition(); int index = 0; if (strForm.charAt(0) == '[') { index++; } int endIndex; if (strForm.charAt(strForm.length() - 1) == ']') { endIndex = strForm.length() - 2; } else { endIndex = strForm.length() - 1; } int currentCell = -1; int numStart = -1; while (index <= endIndex) { char c = strForm.charAt(index); if (Character.isDigit(c)) { if (numStart == -1) { numStart = index; } } else if (c == ',') { int element = Integer.parseInt(strForm.substring(numStart, index)); if (currentCell == -1) { p.addCell(element); currentCell = 0; } else { p.addToCell(currentCell, element); } numStart = -1; } else if (c == '|') { int element = Integer.parseInt(strForm.substring(numStart, index)); if (currentCell == -1) { p.addCell(element); currentCell = 0; } else { p.addToCell(currentCell, element); } currentCell++; p.addCell(); numStart = -1; } index++; } int lastElement = Integer.parseInt(strForm.substring(numStart, endIndex + 1)); p.addToCell(currentCell, lastElement); return p; } Partition();  Partition(Partition other);  Partition(int[][] cellData); static Partition unit(int size); @Override boolean equals(Object o); @Override int hashCode(); int size(); int numberOfElements(); boolean isDiscrete(); Permutation toPermutation(); boolean inOrder(); int getFirstInCell(int cellIndex); SortedSet<Integer> getCell(int cellIndex); Partition splitBefore(int cellIndex, int splitElement); Partition splitAfter(int cellIndex, int splitElement); Permutation setAsPermutation(int upTo); boolean isDiscreteCell(int cellIndex); int getIndexOfFirstNonDiscreteCell(); void addSingletonCell(int element); void removeCell(int index); void addCell(int... elements); void addCell(Collection<Integer> elements); void addToCell(int index, int element); void insertCell(int index, SortedSet<Integer> cell); SortedSet<Integer> copyBlock(int cellIndex); void order(); boolean inSameCell(int elementI, int elementJ); @Override String toString(); static Partition fromString(String strForm);  }
@Test public void fromStringTest() { Partition p = Partition.fromString("[0,1|2,3]"); Assert.assertEquals(2, p.size()); Assert.assertEquals(4, p.numberOfElements()); }