Как к строке замены только однажды без regex в Java?

Pedro Moreno и другие в Google/Youtube работает над ним. Они используют преобразователи конечного состояния для распознавания последовательностей единицы телефона с плеером , подобный фонемам в автоматическом распознавании речи.

Выезд эта статья:

, Если Вы изменяете скорость или подачу всюду по целой песне, я удивлен, что эти алгоритмы все еще распознают песню. Но возможно они нормализуют подачу и скорость (использующий время между ударами), чтобы быть в состоянии распознать покрытые версии также, не только исходные. Но и не удивительно, что это может проигнорировать звуковые сигналы, которые Вы добавили, так как существует достаточно подобия в Вашем аудиопотоке иначе.

(На самом деле основанный на конечном состоянии алгоритм был бы потрясающ относиться к моей библиотеке iTunes, отметить файлы правильно. Поскольку сервисы как MusicBrainz полагается на более или менее точные совпадения хеша Вашего аудио и записи базы данных, тогда как метод преобразователя, кажется, более терпим к различию в распознавании файлов.)

22
задан madth3 9 July 2013 в 23:44
поделиться

2 ответа

Используйте bigString.indexof (smallString) , чтобы получить индекс первого вхождения маленькой строки в большую (или -1, если нет, в этом случае вы готово). Затем используйте bigString.substring , чтобы получить фрагменты большой строки до и после совпадения, и, наконец, concat , чтобы снова соединить эти фрагменты до и после, с предполагаемой заменой в средний.

12
ответ дан 29 November 2019 в 03:36
поделиться

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!

20
ответ дан 29 November 2019 в 03:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: