Я полностью согласен с Мартийном здесь.Выберите правильный инструмент для работы.
Если ваш файл не HTML, но содержит только некоторые токены HTML, есть несколько способов ускорить процесс.
Во-первых, если некоторое количествовходных данных не содержит заменяемых элементов, рассмотрим начало с чего-то вроде:
if (!input.contains('<')) {
return input;
}
Во-вторых, рассмотрим регулярное выражение:
Pattern p = Pattern.compile( your_regex );
Не создавайте шаблон для каждой отдельной строки replaceAll, но попробуйте объединить их (в регулярном выражении есть оператор ИЛИ) и пусть Pattern оптимизирует регулярное выражение.Используйте скомпилированный шаблон и не компилируйте его при каждом вызове, это довольно дорого.
Если регулярные выражения немного сложны, вы также можете реализовать некоторые быстрее (но потенциально менее читаемые)Замените движок самостоятельно:
StringBuilder result = new StringBuilder(input.length();
for (int i=0; i < input.length(); i++) {
char c = input.charAt(i);
if ( c != '<' ) {
continue;
}
int closePos = input.indexOf( '>', i);
if (closePos == -1) {// not found
result.append( input.substring(i, input.length());
return result.toString();
}
i = closePos;
String token = input.substring(i, closePos);
if ( token.equals( "p/" ) {
result.append("\\n");
} else if (token.equals(...)) {
} else if (...) {
}
}
return result.toString();
В этом могут быть некоторые ошибки :)
Преимущество заключается в том, что вы должны проходить ввод только один раз.Большой недостаток в том, что это не так просто понять.Вы также можете написать конечный автомат, анализируя по каждому символу, каким должно быть новое состояние, и это, вероятно, будет быстрее и еще больше работы.