Pedro Moreno и другие в Google/Youtube работает над ним. Они используют преобразователи конечного состояния для распознавания последовательностей единицы телефона с плеером , подобный фонемам в автоматическом распознавании речи.
Выезд эта статья:
, Если Вы изменяете скорость или подачу всюду по целой песне, я удивлен, что эти алгоритмы все еще распознают песню. Но возможно они нормализуют подачу и скорость (использующий время между ударами), чтобы быть в состоянии распознать покрытые версии также, не только исходные. Но и не удивительно, что это может проигнорировать звуковые сигналы, которые Вы добавили, так как существует достаточно подобия в Вашем аудиопотоке иначе.
(На самом деле основанный на конечном состоянии алгоритм был бы потрясающ относиться к моей библиотеке iTunes, отметить файлы правильно. Поскольку сервисы как MusicBrainz полагается на более или менее точные совпадения хеша Вашего аудио и записи базы данных, тогда как метод преобразователя, кажется, более терпим к различию в распознавании файлов.)
Используйте bigString.indexof (smallString)
, чтобы получить индекс первого вхождения маленькой строки в большую (или -1, если нет, в этом случае вы готово). Затем используйте bigString.substring
, чтобы получить фрагменты большой строки до и после совпадения, и, наконец, concat
, чтобы снова соединить эти фрагменты до и после, с предполагаемой заменой в средний.
As Laurence suggested, you can use Pattern.quote
like this:
newString = string.replaceFirst(Pattern.quote(substring), replacement);
This creates a new regex that literally matches the substring. Another approach is simply to compile the substring as a literal regex like this:
newString = Pattern.compile(substring, Pattern.LITERAL).
matcher(string).replaceFirst(replacement);
This might be slightly more efficient, but also a bit less clear.
You could also do it manually, since you're only wanting to replace the first occurrence. But regexes are pretty efficient, so don't optimise prematurely!