### Question:
SemiStructureTokenizer extends Tokenizer { @Override final public boolean incrementToken() throws IOException { if (currentEntry == null) { currentEntry = currentIterator.next(); currentCount = 0; String result = String.format("%s_%d", currentEntry.getKey(), currentCount); termAtt.setEmpty().append(result); return true; } else { if (currentCount < currentEntry.getValue()) { String result = String.format("%s_%d", currentEntry.getKey(), ++currentCount); termAtt.setEmpty().append(result); return true; } else if (currentIterator.hasNext()) { Map.Entry<String, Integer> currentEntry = currentIterator.next(); currentCount = 0; String result = String.format("%s_%d", currentEntry.getKey(), currentCount); termAtt.setEmpty().append(result); return true; } else { return false; } } } protected  SemiStructureTokenizer(Reader input); protected  SemiStructureTokenizer(AttributeFactory factory, Reader input); @Override final boolean incrementToken();  }### Answer:
@Test public void testIncrementToken() throws Exception { }