как заменить символ на '*' с нечетным индексом, в противном случае на '+' - PullRequest
0 голосов
/ 11 июня 2018

я хочу заменить символ s на '+', если он по нечетному индексу, иначе на '*'
Вот мой код

//calling emphasize(shanuss,s)
//expected output +hanu*+
public static String emphasize(String phrase ,char ch) {
        String l = phrase;
        char c = ch;
        int s = l.indexOf(c);

        while (s >= 0) {
            if(s%2==0)
            { l=l.replace(l.charAt(s),'+');}
            else{l=l.replace(l.charAt(s),'*');}
            s = l.indexOf(c, s + 1);
        }

        return l;
    }

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Альтернативой @ Dawood answer будет использование строк (как вы делаете atm), но вам нужно создать еще одну строку для возврата (неизменяемое свойство)

Алгоритм будет:

  1. Для любого элемента в фразе.
  2. проверьте, соответствует ли пара итерации и равна ли символу, который нужно заменить.если true, добавьте «+» к выходной строке.
  3. проверяет, является ли нечетная итерация равной символу для замены.если true, добавьте «*» к выходной строке.
  4. , если не 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

0 голосов
/ 11 июня 2018

Возможно, вам будет проще работать с char[], чем с String, потому что String является неизменным, что означает, что вам придется продолжать создавать новые String объекты.Начните с преобразования в char[], затем итерируйте по нему.

public static String emphasize(String phrase, char toReplace) {
    char[] characters = phrase.toCharArray();
    for (int index = 0; index < characters.length; index++ ) {
        if (characters[index] == toReplace) {
            characters[index] = index % 2 == 1 ? '+' : '*';
        }
    }
    return new String(characters);
}
...