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

时间:2013-11-03 22:07:41

标签: java string

所以问题是这样的:

  

给定一个字符串和第二个“单词”字符串,如果它出现在字符串的前面,我们会说该字符串匹配,除了它的第一个字符串不需要完全匹配。在匹配项上,返回字符串的前面,否则返回空字符串。所以,使用字符串“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());
    }

3 个答案:

答案 0 :(得分:2)

  

首先,我不知道问题甚至是什么问题。

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

如果

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

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

这个词的长度至少为1。

  

其次,我查找了一个解决方案,但我也没有得到解决方案。有人能帮助我理解甚至发生了什么吗?

这是我对startWord的解决方案。我希望它更有意义。

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 "";
    }
}

答案 1 :(得分:1)

你的任务是查看一个字符串str是否以word开头。但是你没有匹配第一个角色。这就是为什么你使用“1”来指定你只想要字符串和单词开始第二个字符。 “0”代表第一个字符。字符串的“indexOf”方法搜索您传入的单词的实例,并返回索引...字符编号...找到匹配项。因此,如果它在开始时被发现......第一个字符......它将返回0.因为你使用子字符串切断了两个字符的第一个字符,所以你只是在字符0处寻找匹配。

如果未找到索引为0(未找到-1,或者找到单词大于0,但不在str的开头),那么它返回一个空字符串。

稍微改动就是只切断“单词”的第一个字符,看看它是否在str的索引1处找到。但是,切断两者的第一个字符并查看它们是否在开头就排成一行更简单。

另一种变化是进行“正则表达式”模式匹配,但这对你来说会不必要地混淆。

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

这是匹配吗?

砍掉第一个角色:

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

发现“oog”从“oogie”的0位开始,所以indexOf返回0。

答案 2 :(得分: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;
}