From 9b375e71294dfa306c030cc5891274d57c2045f6 Mon Sep 17 00:00:00 2001 From: bjculkin Date: Mon, 20 Mar 2017 16:06:10 -0400 Subject: Add more features to sequence delimiter. Two main features were added. One, various sequence closers can imply a subgroup. This is mainly useful in contexts like arrays, where you want one subgroup per array element. Two, predicated opening/closing delimiters. These allow having both an infinite set of opening delimiters, as well as having a set of closers that is both infinite and dependant on what the opener was. Note, however, that predicated openers and closers will be slower than using normal openers/closers, since every one has to be tried to check if a token is a opener/closer. --- .../src/main/java/bjc/utils/parserutils/TokenSplitter.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'BJC-Utils2/src/main/java/bjc/utils/parserutils/TokenSplitter.java') diff --git a/BJC-Utils2/src/main/java/bjc/utils/parserutils/TokenSplitter.java b/BJC-Utils2/src/main/java/bjc/utils/parserutils/TokenSplitter.java index db2c288..d2569d9 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/parserutils/TokenSplitter.java +++ b/BJC-Utils2/src/main/java/bjc/utils/parserutils/TokenSplitter.java @@ -105,7 +105,7 @@ public class TokenSplitter { public void addDelimiter(String... delims) { for(String delim : delims) { if(delim == null) throw new NullPointerException("Delim must not be null"); - + String quoteDelim = Pattern.quote(delim); String delimPat = String.format(WITH_DELIM, quoteDelim); @@ -136,7 +136,7 @@ public class TokenSplitter { public void addMultiDelimiter(String... delims) { for(String delim : delims) { if(delim == null) throw new NullPointerException("Delim must not be null"); - + String delimPat = String.format(WITH_MULTI_DELIM, "(?:" + delim + ")"); if(currPatt == null) { @@ -164,7 +164,7 @@ public class TokenSplitter { public void addNonMatcher(String... delims) { for(String delim : delims) { if(delim == null) throw new NullPointerException("Delim must not be null"); - + if(currPatt == null) { currPatt = new StringBuilder(); currExclusionPatt = new StringBuilder(); @@ -184,6 +184,9 @@ public class TokenSplitter { * Makes this splitter ready to use. */ public void compile() { + if(currPatt == null) currPatt = new StringBuilder(); + if(currExclusionPatt == null) currExclusionPatt = new StringBuilder(); + compPatt = Pattern.compile(currPatt.toString()); exclusionPatt = Pattern.compile(currExclusionPatt.toString()); } -- cgit v1.2.3