summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrien Hopkins <adrien.p.hopkins@gmail.com>2019-07-08 20:31:32 -0400
committerAdrien Hopkins <adrien.p.hopkins@gmail.com>2019-07-08 20:31:32 -0400
commit2692c918fac83c4060e0912a7b92a6d028882afc (patch)
treeabcdb7df5ee7806d17da6b987026850890557a25
parent01b072b98fdd19a2d57afc15a4ee4a80d0bfc0cd (diff)
The unit file reader now uses regular expressions.
-rwxr-xr-xsrc/org/unitConverter/UnitsDatabase.java27
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);