diff options
author | Adrien Hopkins <adrien.p.hopkins@gmail.com> | 2019-07-08 20:31:32 -0400 |
---|---|---|
committer | Adrien Hopkins <adrien.p.hopkins@gmail.com> | 2019-07-08 20:31:32 -0400 |
commit | 2692c918fac83c4060e0912a7b92a6d028882afc (patch) | |
tree | abcdb7df5ee7806d17da6b987026850890557a25 /src/org/unitConverter/UnitsDatabase.java | |
parent | 01b072b98fdd19a2d57afc15a4ee4a80d0bfc0cd (diff) |
The unit file reader now uses regular expressions.
Diffstat (limited to 'src/org/unitConverter/UnitsDatabase.java')
-rwxr-xr-x | src/org/unitConverter/UnitsDatabase.java | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/org/unitConverter/UnitsDatabase.java b/src/org/unitConverter/UnitsDatabase.java index 37d53d4..520195c 100755 --- a/src/org/unitConverter/UnitsDatabase.java +++ b/src/org/unitConverter/UnitsDatabase.java @@ -36,6 +36,8 @@ import java.util.Set; import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Predicate; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.unitConverter.dimension.UnitDimension; import org.unitConverter.math.DecimalComparison; @@ -972,6 +974,11 @@ public final class UnitsDatabase { } /** + * A regular expression that separates names and expressions in unit files. + */ + private static final Pattern NAME_EXPRESSION = Pattern.compile("(\\S+)\\s+(\\S.*)"); + + /** * The exponent operator * * @param base @@ -1114,13 +1121,13 @@ public final class UnitsDatabase { } // divide line into name and expression - final String[] parts = line.split("\t"); - if (parts.length < 2) + final Matcher lineMatcher = NAME_EXPRESSION.matcher(line); + if (!lineMatcher.matches()) throw new IllegalArgumentException(String.format( - "Lines must consist of a dimension name and its definition, separated by tab(s) (line %d).", + "Error at line %d: Lines of a dimension file must consist of a dimension name, then spaces or tabs, then a dimension expression.", lineCounter)); - final String name = parts[0]; - final String expression = parts[parts.length - 1]; + final String name = lineMatcher.group(1); + final String expression = lineMatcher.group(2); if (name.endsWith(" ")) { System.err.printf("Warning - line %d's dimension name ends in a space", lineCounter); @@ -1200,13 +1207,13 @@ public final class UnitsDatabase { } // divide line into name and expression - final String[] parts = line.split("\t"); - if (parts.length < 2) + final Matcher lineMatcher = NAME_EXPRESSION.matcher(line); + if (!lineMatcher.matches()) throw new IllegalArgumentException(String.format( - "Lines must consist of a unit name and its definition, separated by tab(s) (line %d).", + "Error at line %d: Lines of a unit file must consist of a unit name, then spaces or tabs, then a unit expression.", lineCounter)); - final String name = parts[0]; - final String expression = parts[parts.length - 1]; + final String name = lineMatcher.group(1); + final String expression = lineMatcher.group(2); if (name.endsWith(" ")) { System.err.printf("Warning - line %d's unit name ends in a space", lineCounter); |