diff --git a/core/src/net/sf/openrocket/motor/DesignationComparator.java b/core/src/net/sf/openrocket/motor/DesignationComparator.java index 21489cb79..2c0e8f1f4 100644 --- a/core/src/net/sf/openrocket/motor/DesignationComparator.java +++ b/core/src/net/sf/openrocket/motor/DesignationComparator.java @@ -19,9 +19,25 @@ public class DesignationComparator implements Comparator { COLLATOR = Collator.getInstance(Locale.US); COLLATOR.setStrength(Collator.PRIMARY); } - - private Pattern pattern = - Pattern.compile("^([0-9][0-9]+|1/([1-8]))?([a-zA-Z])([0-9]+)(.*?)$"); + + /* + * Regexp to parse the multitude of designations. Supported types: + * + * 1/4A4... + * 1/2A4... + * A4... + * 132G100... + * 132-G100... + * + * Capture groups: + * 1 = garbage (stuff before impulse class) + * 2 = divisor number for 1/2A, 1/4A etc, otherwise null + * 3 = impulse class letter + * 4 = average thrust + * 5 = stuff after thrust number + */ + private Pattern pattern = + Pattern.compile("^([0-9]+-?|1/([1-8]))?([a-zA-Z])([0-9,]+)(.*?)$"); @Override public int compare(String o1, String o2) { @@ -32,13 +48,13 @@ public class DesignationComparator implements Comparator { m2 = pattern.matcher(o2); if (m1.find() && m2.find()) { - + String o1Class = m1.group(3); - int o1Thrust = Integer.parseInt(m1.group(4)); + int o1Thrust = Integer.parseInt(m1.group(4).replaceAll(",", "")); String o1Extra = m1.group(5); String o2Class = m2.group(3); - int o2Thrust = Integer.parseInt(m2.group(4)); + int o2Thrust = Integer.parseInt(m2.group(4).replaceAll(",", "")); String o2Extra = m2.group(5); // 1. Motor class @@ -46,18 +62,18 @@ public class DesignationComparator implements Comparator { // 1/2A and 1/4A comparison String sub1 = m1.group(2); String sub2 = m2.group(2); - + if (sub1 != null || sub2 != null) { if (sub1 == null) sub1 = "1"; if (sub2 == null) sub2 = "1"; - value = -COLLATOR.compare(sub1,sub2); + value = -COLLATOR.compare(sub1, sub2); if (value != 0) return value; } } - value = COLLATOR.compare(o1Class,o2Class); + value = COLLATOR.compare(o1Class, o2Class); if (value != 0) return value;