关于单词匹配的 CodingBat Java 练习没有意义



所以问题是这样的:

给定一个字符串和第二个"word"字符串,如果单词出现在字符串的前面,我们将说该单词与字符串匹配,除了它的第一个字符不需要完全匹配。在匹配项上,返回字符串的前面,或以其他方式返回空字符串。因此,对于字符串"hippo",单词"hi"返回"hi","xip"返回"hip"。该单词的长度至少为 1。"

首先,我不知道这个问题在问什么。其次,我查找了一个解决方案,但我也没有得到解决方案。有人可以帮助我理解正在发生的事情吗?有没有其他方法可以做到这一点?

public String startWord(String str, String word) {
    if (str.length() < 1) {
       return "";
    }
    if (str.substring(1).indexOf(word.substring(1)) != 0) { // I am utterly confused here, wouldn't this always be true if it starts beyond zero?
        return "";
    }
       return str.substring(0, word.length());
    }

首先,我不知道这个问题在问什么。

您有第一个字符串和第二个字符串(单词)。

该单词与第一个字符串匹配,如果

  • 该单词与第一个字符串的开头匹配。
  • 即使单词的第一个
  • 字母与前字符串的第一个字母不匹配,单词也与第一个字符串的开头匹配。
如果单词与第一个字符串

匹配,则返回第一个字符串的第一个单词长度字符。 否则,返回空字符串。

该单词的长度至少为 1。

其次,我查找了一个解决方案,但我也没有得到解决方案。有人可以帮助我理解正在发生的事情吗?

这是我启动Word的解决方案。 我希望这更有意义。

public String startWord(String str, String word) {
    String x = word.substring(1);
    if (str.startsWith(x, 1)) {
        return str.substring(0, word.length());
    } else {
        return "";
    }
}

你的任务是查看字符串str是否以单词开头。 但是您与第一个字符不匹配。 这就是为什么您使用"1"来指定您只需要以第二个字符开头的字符串和单词。 "0"表示第一个字符。 字符串的"indexOf"方法搜索您传入的单词的实例,并返回索引。字符号...找到匹配项的位置。 所以如果一开始就发现了..第一个角色...它将返回 0。 因为您使用子字符串砍掉了两者的第一个字符,所以您只是在寻找字符 0 处的匹配项。

如果在 0 处找不到索引(-1 表示未找到,或大于 0 表示找到单词,但不在 str 的开头),则返回一个空字符串。

稍微改变一下是只砍掉"word"的第一个字符,看看它是否在str的索引1中找到。 但是砍掉两者的第一个字符并查看它们是否在开始时对齐更简单。

另一种变化是进行"正则表达式"模式匹配,但这会给您带来不必要的混淆。

Original str:  "woogie"
Original word: "goog"

是匹配吗?

砍掉第一个字符:

Shortened str: "oogie"
Shortened word: "oog"

发现 "oog" 从 "oogie" 的位置 0 开始,因此 indexOf 返回 0。

public String startWord(String str, String word) {
  int len1 = str.length();
  int len2 = word.length();
  String withoutFirst = word.substring(1,len2);
  String result = "";
  if(len1>=len2 && len2>0){
   if(str.substring(0,len2).equals(word)){
     result = word;
     }else if(word.substring(1,len2).equals(str.substring(1,len2))){
      result = str.substring(0,1) + word.substring(1,len2);
    }
  }else{
   result = "";
  }
  return result;
}

最新更新