diff options
Diffstat (limited to 'src/org/unitConverter/unit/UnitDatabase.java')
-rw-r--r-- | src/org/unitConverter/unit/UnitDatabase.java | 43 |
1 files changed, 18 insertions, 25 deletions
diff --git a/src/org/unitConverter/unit/UnitDatabase.java b/src/org/unitConverter/unit/UnitDatabase.java index 56846a1..9812bd0 100644 --- a/src/org/unitConverter/unit/UnitDatabase.java +++ b/src/org/unitConverter/unit/UnitDatabase.java @@ -1680,37 +1680,30 @@ public final class UnitDatabase { * @since 2020-08-26 */ List<UnitPrefix> getPrefixesFromName(final String unitName) { - if (this.prefixlessUnits.containsKey(unitName)) - return new ArrayList<>(); - else { + final List<UnitPrefix> prefixes = new ArrayList<>(); + String name = unitName; + + while (!this.prefixlessUnits.containsKey(name)) { // find the longest prefix - String longestPrefix = null; - int longestLength = 0; + String longestPrefixName = null; + int longestLength = name.length(); - for (final String prefixName : this.prefixes.keySet()) { - // a prefix name is valid if: - // - it is prefixed (i.e. the unit name starts with it) - // - it is longer than the existing largest prefix (since I am - // looking for the longest valid prefix) - // - the part after the prefix is a valid unit name - // - the unit described that name is a linear unit (since only - // linear units can have prefixes) - if (unitName.startsWith(prefixName) - && prefixName.length() > longestLength) { - final String rest = unitName.substring(prefixName.length()); - if (this.containsUnitName(rest) - && this.getUnit(rest) instanceof LinearUnit) { - longestPrefix = prefixName; - longestLength = prefixName.length(); - } + while (longestPrefixName == null) { + longestLength--; + if (longestLength <= 0) + throw new AssertionError( + "No prefix found in " + name + ", but it is not a unit!"); + if (this.prefixes.containsKey(name.substring(0, longestLength))) { + longestPrefixName = name.substring(0, longestLength); } } - final List<UnitPrefix> prefixes = this - .getPrefixesFromName(unitName.substring(longestLength)); - prefixes.add(this.getPrefix(longestPrefix)); - return prefixes; + // longest prefix found! + final UnitPrefix prefix = this.getPrefix(longestPrefixName); + prefixes.add(0, prefix); + name = name.substring(longestLength); } + return prefixes; } /** |