summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/ExcludingTokenSplitter.java
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2017-04-11 12:16:49 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2017-04-11 12:16:49 -0400
commit9f619b8de8f2c5da9dff170e2e351cfe57eaebc8 (patch)
tree796c698c23a30541701d3330530978362052b8d1 /BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/ExcludingTokenSplitter.java
parent2cc559513eda04aabbc140c2024ebf650631bccb (diff)
Remove old splitters
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/ExcludingTokenSplitter.java')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/ExcludingTokenSplitter.java71
1 files changed, 71 insertions, 0 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/ExcludingTokenSplitter.java b/BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/ExcludingTokenSplitter.java
new file mode 100644
index 0000000..369e7ae
--- /dev/null
+++ b/BJC-Utils2/src/main/java/bjc/utils/parserutils/splitter/ExcludingTokenSplitter.java
@@ -0,0 +1,71 @@
+package bjc.utils.parserutils.splitter;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.function.Predicate;
+
+import bjc.utils.funcdata.FunctionalList;
+import bjc.utils.funcdata.IList;
+
+/**
+ * A token splitter that will not split certain tokens.
+ *
+ * @author EVE
+ *
+ */
+public class ExcludingTokenSplitter implements TokenSplitter {
+ private final Set<String> literalExclusions;
+
+ private final IList<Predicate<String>> predExclusions;
+
+ private final TokenSplitter spliter;
+
+ /**
+ * Create a new excluding token splitter.
+ *
+ * @param splitter
+ * The splitter to apply to non-excluded strings.
+ */
+ public ExcludingTokenSplitter(final TokenSplitter splitter) {
+ spliter = splitter;
+
+ literalExclusions = new HashSet<>();
+
+ predExclusions = new FunctionalList<>();
+ }
+
+ /**
+ * Exclude literal strings from splitting.
+ *
+ * @param exclusions
+ * The strings to exclude from splitting.
+ */
+ public final void addLiteralExclusions(final String... exclusions) {
+ for (final String exclusion : exclusions) {
+ literalExclusions.add(exclusion);
+ }
+ }
+
+ /**
+ * Exclude all of the strings matching any of the predicates from
+ * splitting.
+ *
+ * @param exclusions
+ * The predicates to use for exclusions.
+ */
+ @SafeVarargs
+ public final void addPredicateExclusion(final Predicate<String>... exclusions) {
+ for (final Predicate<String> exclusion : exclusions) {
+ predExclusions.add(exclusion);
+ }
+ }
+
+ @Override
+ public IList<String> split(final String input) {
+ if (literalExclusions.contains(input))
+ return new FunctionalList<>(input);
+ else if (predExclusions.anyMatch(pred -> pred.test(input)))
+ return new FunctionalList<>(input);
+ else return spliter.split(input);
+ }
+}