diff options
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/funcutils/TokenSplitter.java')
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/funcutils/TokenSplitter.java | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/funcutils/TokenSplitter.java b/BJC-Utils2/src/main/java/bjc/utils/funcutils/TokenSplitter.java new file mode 100644 index 0000000..0da9f7d --- /dev/null +++ b/BJC-Utils2/src/main/java/bjc/utils/funcutils/TokenSplitter.java @@ -0,0 +1,56 @@ +package bjc.utils.funcutils; + +import java.util.function.BiFunction; + +import bjc.utils.funcdata.FunctionalList; +import bjc.utils.funcdata.IFunctionalList; + +final class TokenSplitter implements + BiFunction<String, String, IFunctionalList<String>> { + private String tokenToSplit; + + public TokenSplitter(String tok) { + this.tokenToSplit = tok; + } + + @Override + public IFunctionalList<String> apply(String operatorName, + String operatorRegex) { + if (operatorName == null) { + throw new NullPointerException( + "Operator name must not be null"); + } else if (operatorRegex == null) { + throw new NullPointerException( + "Operator regex must not be null"); + } + + if (tokenToSplit.contains(operatorName)) { + if (StringUtils.containsOnly(tokenToSplit, + operatorRegex)) { + return new FunctionalList<>(tokenToSplit); + } + + IFunctionalList<String> splitTokens = new FunctionalList<>( + tokenToSplit.split(operatorRegex)); + + IFunctionalList<String> result = new FunctionalList<>(); + + int tokenExpansionSize = splitTokens.getSize(); + + splitTokens.forEachIndexed((tokenIndex, token) -> { + + if (tokenIndex != tokenExpansionSize + && tokenIndex != 0) { + result.add(operatorName); + result.add(token); + } else { + result.add(token); + } + }); + + return result; + } + + return new FunctionalList<>(tokenToSplit); + } +}
\ No newline at end of file |
