Я не смог четко сформулировать вопрос. Но тем не менее вот:
Например, я имею строку "синхрофазотрон" и подстроку "схрон". Функция должна вернуть true, так как данную подстроку можно получить, если пропускать некоторые символы. Суть в том, что нужно сохранить очередность, подстроки хранятся в массиве строк. Есть ли в Java встроенные функции, которые смогут это сделать?
У меня была идея, преобразовать подстроку в регулярное выражение, что-то типа "с*х*р*о*н" и использовать matches().
UPD:
По поводу регулярных выражений. Преобразование строки в регулярное выражение и использовать matches() не так уж и трудно реализовать. Но что если у тебя массив подстрок насчитывает больше сотни тысяч элементов, и некоторые из них могут достигать в длине 20 символов?
Встроенных нет, но реализовать не сложно:
public static boolean containsSparse(String string, String substring) {
int index = 0;
for (char character : substring.toCharArray()) {
index = string.indexOf(character, index);
if (index == -1)
return false;
}
return true;
}
Итерируем и проверяем:
public static boolean containsSequence(String string, String substring) {
int lastIndex = 0;
for (int i = 0; i < substring.length(); i++) {
int index = string.substring(lastIndex).indexOf(substring.charAt(i));
if (index == -1)
return false;
lastIndex = lastIndex + index;
}
return true;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей