Как вернуть строку со всеми экземплярами строки, замененными другой строкой (Java) - PullRequest
0 голосов
/ 20 ноября 2018

В этой программе я пытаюсь вернуть новую строку, которая состоит из добавленных новых букв и старых букв, если они не соответствуют ограничениям.Я застрял с точки зрения того, что я не знаю, как исправить свой код, чтобы он печатался правильно.Любая помощь или предложения приветствуются!

Вот несколько примеров:

str: "asdfdsdfjsdf", слово: "sdf", c: "q"

должно вернуться"aqdqjq", я получаю "asdqqq"

str: "aaaaaaaa", word: "aaa", c: "w"

должен вернуть "wwaa", как сейчасмой код только возвращает "ww"

public static String replaceWordWithLetter(String str, String word, String c) 

    String result = "";
    int index = 0;

    while (index < str.length() )
    {
        String x = str.substring(index, index + word.length() );
        if (x.equals(word))
        {
            x = c;
            index = index + word.length();
        }
        result = result + x;
        index++;
    }
    if (str.length() > index)
    {
        result = result + str.substring(index, str.length() - index);
    }
    return result;
 }

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

Вы можете использовать String.replaceAll() метод. пример:

public class StringReplace {
    public static void main(String[] args) {

        String str = "aaaaaaaa";
        String fnd = "aaa";
        String rep = "w";

        System.out.println(str.replaceAll(fnd, rep));
        System.out.println("asdfdsdfjsdf".replaceAll("sdf", "q"));
    }

}

Выход:

wwaa
aqdqjq
0 голосов
/ 20 ноября 2018

Нашел исправление моей проблемы, используя код @ GBlodgett:

    String result = "";
    int index = 0;

    while (index <= str.length() - word.length() )
    {
        String x = str.substring(index, index + word.length() );
        if (x.equals(word))
        {
            result = result + c;
            index = index + word.length();
        }
        else {
            result = result + x.charAt(0);
            index++;
        }
    }
    if (str.length() < index + word.length())
    {
        result = result + (str.substring(index));
    }
    return result;
}
0 голосов
/ 20 ноября 2018

Вы, кажется, слишком усложняете это.Вы можете просто использовать метод replace():

public static String replaceWordWithLetter(String str, String word, String c)  {
    return str.replace(word, c);
}

, который при вызове:

replaceWordWithLetter("asdfdsdfjsdf", "sdf", "q")

Производит вывод:

aqdqjq

Проблема с вашим текущим методом заключается в том, что если подстрока не равна word, вы добавите столько символов, сколько есть в word, а затем только на один индекс вверх.Если вы не будете заменять последовательность, вам нужно добавить только один символ к result.Также гораздо эффективнее использовать StringBuilder.Также, как отмечалось, если String не делится на word.length(), это выдаст StringIndexOutOfBoundsError.Чтобы решить эту проблему, вы можете использовать метод Math.min(), чтобы подстрока не выходила за пределы.Оригинальный метод с исправлениями:

public static String replaceWordWithLetter(String str, String word, String c)  {
    StringBuilder result = new StringBuilder();
    int index = 0;

    while (index < str.length() )
    {
        String x = str.substring(index, Math.min(index + word.length(), str.length()));
        if (x.equals(word))
        {
            result.append(c);
            index = index + word.length();
        }
        //If we aren't replacing, only add one char
        else {
            result.append(x.charAt(0));
            index++;
        }
    }
    if (str.length() > index)
    {
       result.append(str.substring(index, str.length() - index));
    }
    return result.toString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...