查找,删除和替换字符串中的单词(手动)

时间:2018-11-19 00:29:08

标签: java

我正在尝试用Java创建一个肉类,该肉类可以在短语(参数)中找到一个单词(参数),并将其替换为另一个单词(参数)。挑战是不要使用任何对我有用的特殊功能。我想知道如何单独使用Java的内置函数查找和替换(不导入模块)。我也不能使用replace命令,而是想用子字符串更改代码。我目前拥有的代码是:

  public static String searchAndReplace(String phrase, String searchWord, String replaceWord){
    String newPhrase = "";
    int findIndex = phrase.indexOf(searchWord);

    while (findIndex >=0){
      newPhrase = phrase.substring(0,findIndex)+phrase.substring(findIndex + searchWord.length());

      findIndex = phrase.indexOf(replaceWord);
    }
    return newPhrase;
  }

当前代码无法正常运行。

3 个答案:

答案 0 :(得分:1)

这里是一种可行的方法。请在下面的代码中查看注释:

class Main {
    public static void main(String[] args) {
        String search = "dog";
        String replace = "cat";

        String originalPhrase = "I have a dog.";

        System.out.println(replaceWord(originalPhrase, search, replace));
    }

    private static String replaceWord(String originalPhrase, String searchWord, String replaceWord) {

        // Assuming you cannot use a StringBuilder...
        String finalPhrase = "";

        // First, determine if the searchWord even exists in the originalPhrase
        if (originalPhrase.contains(searchWord)) {

            // Catch character indexes for the start and end of the searchWord within our originalPhrase
            int start = originalPhrase.indexOf(searchWord);
            int end = start + searchWord.length();

            // Add the beginning of the originalPhrase (up to the searchWord) to our finalPhrase
            finalPhrase += originalPhrase.substring(0, start);

            // Add our replaceWord
            finalPhrase += replaceWord;

            // Gather the rest of the phrase (after the searchWord)
            finalPhrase += originalPhrase.substring(end);

            // Return our completed phrase
            return finalPhrase;

        } else {

            // If the search word doesn't exist, return the original phrase
            return originalPhrase;
        }

    }
}

答案 1 :(得分:1)

你很近。刚刚在字符串串联中添加了replaceWord,并删除了newPhrase变量。最终代码如下所示:-

public static String searchAndReplace(String phrase, String searchWord, String replaceWord) {
    int findIndex = phrase.indexOf(searchWord);

    while (findIndex >= 0) {
        phrase = phrase.substring(0, findIndex) + replaceWord + phrase.substring(findIndex + searchWord.length());

        findIndex = phrase.indexOf(searchWord);
    }
    return phrase;
}

修改

您的newPhrase的问题出在以下几个地方:-

findIndex = phrase.indexOf(replaceWord); //inside while loop

您更改了newPhrase,但仍在检查原始phrase中的单词。另外,您正在寻找的是replaceWord而不是searchWord

答案 2 :(得分:1)

如果您想自己发现和开发该算法,则传统上应该使用笔和纸来完成。

  • 将字符串绘制为盒子序列,并用一些硬币或大头针作为指针变量。
  • 定义基本允许的操作是什么。例如“比较两个字符”,“将一个字符添加到字符串的末尾”,“比较字符串的两个区域”。
  • 用日常用语写下您的算法。
  • 手动遵循算法。
  • 考虑有用的测试用例,例如
    • replaceWord出现在开头
    • replaceWord出现在中间
    • replaceWord出现在末尾
    • replaceWord根本没有出现
    • replaceWord连续出现两次
    • “ a”被替换为“ aaa”

一种完全不同的方法是在Java IDE中编写"source".replace("a", "aaa")并使用调试器逐步完成所有单个步骤。 Since Java 9,String.replace的实现与您要查找的基本字符操作完全相同。 this code的绿色部分还包含来自经验丰富的开发人员的一些测试用例。

在使用第二种方法之前,您应该已经完成​​第一种方法并已完全理解它。只有这样,您才能单步执行代码,并将实际发生的步骤与预期发生的步骤进行比较。