Обработка строк в Java - это то, что я пытаюсь научиться делать хорошо. В настоящее время я хочу взять строку и заменить любые символы, которые я нахожу.
Вот моя текущая неэффективная (и вроде бы глупая IMO) функция. Это было написано просто для работы.
public String convertWord(String word)
{
return word.toLowerCase().replace('á', 'a')
.replace('é', 'e')
.replace('í', 'i')
.replace('ú', 'u')
.replace('ý', 'y')
.replace('ð', 'd')
.replace('ó', 'o')
.replace('ö', 'o')
.replaceAll("[-]", "")
.replaceAll("[.]", "")
.replaceAll("[/]", "")
.replaceAll("[æ]", "ae")
.replaceAll("[þ]", "th");
}
Я побежал 1.000.000 трасс, и это заняло 8182ms. Итак, как мне приступить к изменению этой функции, чтобы сделать ее более эффективной?
Решение найдено:
Преобразование функции в этот
public String convertWord(String word)
{
StringBuilder sb = new StringBuilder();
char[] charArr = word.toLowerCase().toCharArray();
for(int i = 0; i < charArr.length; i++)
{
// Single character case
if(charArr[i] == 'á')
{
sb.append('a');
}
// Char to two characters
else if(charArr[i] == 'þ')
{
sb.append("th");
}
// Remove
else if(charArr[i] == '-')
{
}
// Base case
else
{
sb.append(word.charAt(i));
}
}
return sb.toString();
}
Запуск этой функции 1.000.000 раз занимает 518 мс. Поэтому я считаю, что это достаточно эффективно. Спасибо за помощь ребятам:)