summaryrefslogtreecommitdiff
path: root/src/org/unitConverter/unit/UnitDatabase.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/unitConverter/unit/UnitDatabase.java')
-rw-r--r--src/org/unitConverter/unit/UnitDatabase.java43
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;
}
/**