StringBuffer, StringIterator are old school

This commit is contained in:
Douglas Lovell 2015-10-28 16:56:27 -06:00
parent 4be3e115b6
commit 1f63ae71d4
4 changed files with 27 additions and 9 deletions

View File

@ -26,7 +26,7 @@ class CharacterTransition extends Transition<Character> {
}
@Override
public void updateMatch(StringBuffer match) {
public void updateMatch(StringBuilder match) {
match.append(token);
}

View File

@ -29,6 +29,6 @@ public abstract class Transition<T> {
public T transitionToken() {
return token;
}
public abstract void updateMatch(StringBuffer match);
public abstract void updateMatch(StringBuilder match);
public abstract boolean isWordSeparator();
}

View File

@ -1,5 +1,7 @@
package org.ahocorasick.trie;
import java.text.CharacterIterator;
import java.util.Arrays;
import org.ahocorasick.trie.candidate.EmitCandidateFlushHandler;
import org.ahocorasick.trie.candidate.EmitCandidateHolder;
import org.ahocorasick.trie.candidate.NonOverlappingEmitCandidateHolder;
@ -9,6 +11,7 @@ import org.ahocorasick.trie.handler.EmitHandler;
import org.ahocorasick.trie.handler.FirstMatchHandler;
import java.util.Collection;
import java.util.Iterator;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingDeque;
@ -33,24 +36,37 @@ public class Trie {
}
private class WordTokenizer implements KeywordTokenizer {
private final java.util.StringTokenizer st;
private final Iterator<String> st;
public WordTokenizer(String keyword) {
st = new java.util.StringTokenizer(keyword);
String[] tokens = keyword.split("\\s");
st = Arrays.asList(tokens).iterator();
}
@Override
public Transition<String> nextTransition() {
return new WordTransition(st.nextToken());
WordTransition t = null;
if (st.hasNext()) {
t = new WordTransition(st.next());
}
return t;
}
}
private class CharacterTokenizer implements KeywordTokenizer {
private final java.text.StringCharacterIterator ct;
private char cur;
public CharacterTokenizer(String keyword) {
ct = new java.text.StringCharacterIterator(keyword);
cur = ct.first();
}
@Override
public Transition<Character> nextTransition() {
return new CharacterTransition(ct.next());
CharacterTransition t = null;
if (cur != CharacterIterator.DONE) {
t = new CharacterTransition(cur);
cur = ct.next();
}
return t;
}
}
@ -68,7 +84,7 @@ public class Trie {
private class TokenStream {
private final KeywordTokenizer kwt;
private Transition lookahead;
private final StringBuffer match = new StringBuffer();
private final StringBuilder match = new StringBuilder();
public TokenStream(KeywordTokenizer kwt) {
this.kwt = kwt;
@ -159,8 +175,10 @@ public class Trie {
State currentState = this.rootState;
Transition tn = tknz.nextTransition();
while (tn != null) {
if (flushHandler.stop()) {
return;
}
currentState = getState(currentState, tn, flushHandler);
Collection<String> emits = currentState.emit();
for (String emit : emits) {
int position = tknz.position();

View File

@ -26,7 +26,7 @@ public class WordTransition extends Transition<String> {
}
@Override
public void updateMatch(StringBuffer match) {
public void updateMatch(StringBuilder match) {
if (0 < match.length()) {
match.append(' ');
}