Альтернативой @ Dawood answer будет использование строк (как вы делаете atm), но вам нужно создать еще одну строку для возврата (неизменяемое свойство)
Алгоритм будет:
- Для любого элемента в фразе.
- проверьте, соответствует ли пара итерации и равна ли символу, который нужно заменить.если true, добавьте «+» к выходной строке.
- проверяет, является ли нечетная итерация равной символу для замены.если true, добавьте «*» к выходной строке.
- , если не s, просто добавьте входной символ к выходной строке.
метод выделения:
public class TestEmphasize {
public static void main(String[] args) {
System.out.println(emphasize("shanuss",'s'));
}
public static String emphasize(String phrase ,char ch) {
int s = phrase.indexOf(ch);
String output = "";
for(int i = 0; i < phrase.length(); i++) {
if(s%2 == 0 && s == i) output += "+";
if(s%2 != 0 && s == i) output += "*";
else if(phrase.charAt(i) != ch) output += phrase.charAt(i);
s = phrase.indexOf(ch, s + 1);
}
return output;
}
}
Вывод:
+hanu*+
Дополнительно:
Если вы все еще хотите использовать свой исходный код, вы должны использовать replaceFirst(String regex,String replacement)
, потому что метод replace(CharSequence target, CharSequence replacement)
изменитсявсе вхождения от s
до +
, что приводит к неожиданному поведению.
l=l.replaceFirst(l.charAt(s)+"",'+'+"");
note : + ""
- это трюк для преобразования char
в String