@Override protected int indexOf(final String string, final String contains, final Mode mode, final InputInfo info) throws QueryException { if(!(collator instanceof RuleBasedCollator)) throw CHARCOLL.get(info); final RuleBasedCollator rbc = (RuleBasedCollator) collator; final CollationElementIterator iterS = rbc.getCollationElementIterator(string); final CollationElementIterator iterC = rbc.getCollationElementIterator(contains); final int elemC = next(iterC); if(elemC == -1) return 0; final int offC = iterC.getOffset(); do { // find first equal character for(int elemS; (elemS = next(iterS)) != elemC;) { if(elemS == -1 || mode == Mode.STARTS_WITH) return -1; } final int offS = iterS.getOffset(); if(startsWith(iterS, iterC)) { if(mode == Mode.INDEX_AFTER) { return iterS.getOffset(); } else if(mode == Mode.ENDS_WITH) { if(next(iterS) == -1) return offS - 1; } else { return offS - 1; } } iterS.setOffset(offS); iterC.setOffset(offC); } while(true); }
@Override protected int indexOf(final String string, final String contains, final Mode mode, final InputInfo info) throws QueryException { if(!(collator instanceof RuleBasedCollator)) throw CHARCOLL.get(info); final RuleBasedCollator rbc = (RuleBasedCollator) collator; final CollationElementIterator iterS = rbc.getCollationElementIterator(string); final CollationElementIterator iterC = rbc.getCollationElementIterator(contains); final int elemC = next(iterC); if(elemC == -1) return 0; final int offC = iterC.getOffset(); do { // find first equal character for(int elemS; (elemS = next(iterS)) != elemC;) { if(elemS == -1 || mode == Mode.STARTS_WITH) return -1; } final int offS = iterS.getOffset(); if(startsWith(iterS, iterC)) { if(mode == Mode.INDEX_AFTER) { return iterS.getOffset(); } else if(mode == Mode.ENDS_WITH) { if(next(iterS) == -1) return offS - 1; } else { return offS - 1; } } iterS.setOffset(offS); iterC.setOffset(offC); } while(true); }
s0.setOffset(start);
s0.setOffset(start);
s0.setOffset(start);