Мне нужно проверить, если одна строка содержит символ $
, прежде чем заменить этот.Равенство валидации и проверка индекса?
Я сделал две реализации для этого предложения.
Первая реализация всегда выполняет replace(char oldChar, char newChar)
и equals(Object anObject)
как подтверждение.
String getImportLine(Class<?> clazz) {
String importLine = toSanitizedClassName(clazz.getName());
String importStaticLine = importLine.replace('$', '.');
if (importLine.equals(importStaticLine)) {
return String.format("import %s;", importLine);
}
return String.format("import static %s;", importStaticLine);
}
Эта реализация анализирует строку два раза:
importLine.replace('$', '.')
importLine.equals(importStaticLine)
Вторая реализация использует indexOf(int ch)
в качестве проверки и replace(char oldChar, char newChar)
в худшем случае.
String getImportLine(Class<?> clazz) {
String importLine = toSanitizedClassName(clazz.getName());
if (importLine.indexOf('$') == -1) {
return String.format("import %s;", importLine);
}
importLine = importLine.replace('$', '.');
return String.format("import static %s;", importLine);
}
Вторая реализация, в худшем случае, разобрать строку два раза:
importLine.indexOf('$') == -1
importLine.replace('$', '.')
Есть ли какая-то разница с точки зрения производительности между использование equals
vs indexOf
как подтверждение?
Оценить их :) – epoch
У них такой же Big-O, что я могу сказать, длина строки. Но то, что вы на самом деле пытаетесь выяснить здесь, - это что-то занимает 5 наносекунд или 7. Почему это важно? – Tobb
@Tobb Я просто хочу подтвердить, что между этими двумя реализациями нет существенного различия в эффективности. Я не понимаю, почему мой вопрос так ошибается. Хорошо, когда downvoter дает причину ... –