我正在尝试用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;
}
当前代码无法正常运行。
答案 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)
如果您想自己发现和开发该算法,则传统上应该使用笔和纸来完成。
一种完全不同的方法是在Java IDE中编写"source".replace("a", "aaa")
并使用调试器逐步完成所有单个步骤。 Since Java 9,String.replace的实现与您要查找的基本字符操作完全相同。 this code的绿色部分还包含来自经验丰富的开发人员的一些测试用例。
在使用第二种方法之前,您应该已经完成第一种方法并已完全理解它。只有这样,您才能单步执行代码,并将实际发生的步骤与预期发生的步骤进行比较。