summaryrefslogtreecommitdiff
path: root/BJC-Utils2
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2017-03-11 13:23:22 -0500
committerbculkin2442 <bjculkin@mix.wvu.edu>2017-03-11 13:23:22 -0500
commitadadb2a126ea4abaace49b83bc6e72a8de7e100c (patch)
treed7a9befc0b124b8ee077173893ef2d06f2a3c89e /BJC-Utils2
parent3ffab8365443c2a656e2f59a97764ec9bc9204c9 (diff)
Don't split solo operators
Diffstat (limited to 'BJC-Utils2')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/funcutils/NeoTokenSplitter.java23
1 files changed, 19 insertions, 4 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/funcutils/NeoTokenSplitter.java b/BJC-Utils2/src/main/java/bjc/utils/funcutils/NeoTokenSplitter.java
index fd4b130..91cbeb5 100644
--- a/BJC-Utils2/src/main/java/bjc/utils/funcutils/NeoTokenSplitter.java
+++ b/BJC-Utils2/src/main/java/bjc/utils/funcutils/NeoTokenSplitter.java
@@ -31,8 +31,10 @@ public class NeoTokenSplitter {
private static String WITH_MULTI_DELIM = "((?<=%1$s+)(?!%1$s)|(?<!%1$s)(?=%1$s+))";
private StringBuilder currPatt;
+ private StringBuilder currExclusionPatt;
private Pattern compPatt;
+ private Pattern exclusionPatt;
/**
* Create a new token splitter.
@@ -57,6 +59,10 @@ public class NeoTokenSplitter {
throw new IllegalStateException("Token splitter has not been compiled yet");
}
+ /*
+ * Don't split something that matches only an operator
+ */
+ if(exclusionPatt.matcher(inp).matches()) return new String[] {inp};
return compPatt.split(inp);
}
@@ -70,14 +76,18 @@ public class NeoTokenSplitter {
* @param delim The delimiter to match on.
*/
public void addDelimiter(String delim) {
- String delimPat = String.format(WITH_DELIM, Pattern.quote(delim));
+ String quoteDelim = Pattern.quote(delim);
+ String delimPat = String.format(WITH_DELIM, quoteDelim);
if(currPatt == null) {
- currPatt = new StringBuilder();
+ currPatt = new StringBuilder();
+ currExclusionPatt = new StringBuilder();
currPatt.append("(?:" + delimPat + ")");
+ currExclusionPatt.append("(?:" + quoteDelim + ")");
} else {
currPatt.append("|(?:" + delimPat + ")");
+ currExclusionPatt.append("|(?:" + quoteDelim + ")");
}
}
@@ -93,11 +103,15 @@ public class NeoTokenSplitter {
String delimPat = String.format(WITH_MULTI_DELIM, "(?:" + delim + ")");
if(currPatt == null) {
- currPatt = new StringBuilder();
+ currPatt = new StringBuilder();
+ currExclusionPatt = new StringBuilder();
currPatt.append("(?:" + delimPat + ")");
+ currExclusionPatt.append("(?:(?:" + delim + ")+)");
+
} else {
currPatt.append("|(?:" + delimPat + ")");
+ currExclusionPatt.append("|(?:(?:" + delim + ")+)");
}
}
@@ -107,6 +121,7 @@ public class NeoTokenSplitter {
* Makes this splitter ready to use.
*/
public void compile() {
- compPatt = Pattern.compile(currPatt.toString());
+ compPatt = Pattern.compile(currPatt.toString());
+ exclusionPatt = Pattern.compile(currExclusionPatt.toString());
}
}