diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-03-11 13:23:22 -0500 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-03-11 13:23:22 -0500 |
| commit | adadb2a126ea4abaace49b83bc6e72a8de7e100c (patch) | |
| tree | d7a9befc0b124b8ee077173893ef2d06f2a3c89e /BJC-Utils2/src/main | |
| parent | 3ffab8365443c2a656e2f59a97764ec9bc9204c9 (diff) | |
Don't split solo operators
Diffstat (limited to 'BJC-Utils2/src/main')
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/funcutils/NeoTokenSplitter.java | 23 |
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()); } } |
