All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.almondtools.stringsandchars.search.AbstractStringFinder Maven / Gradle / Ivy

package com.almondtools.stringsandchars.search;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public abstract class AbstractStringFinder implements StringFinder {

	public abstract StringMatch findNext();

	public abstract void skipTo(long pos);

	@Override
	public List findAll() {
		List matches = new ArrayList();
		while (true) {
			StringMatch match = findNext();
			if (match == null) {
				return matches;
			} else {
				matches.add(match);
			}
		}
	}
	
	@Override
	public List findAllNonOverlapping() {
		List matches = new ArrayList();
		next: while (true) {
			StringMatch match = findNext();
			if (match == null) {
				return matches;
			} else {
				List backup = new LinkedList();
				while (!matches.isEmpty()) {
					int lastIndex = matches.size() - 1;
					StringMatch last = matches.get(lastIndex);
					if (last.start() >= match.start() && last.end() <= match.end()) {
						backup.add(matches.remove(lastIndex));
					} else if (last.end() > match.start()){
						matches.addAll(backup);
						continue next;
					} else {
						break;
					}
				}
				matches.add(match);
			}
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy