0

所以问题是这样的:

给定一个字符串和第二个“单词”字符串,如果单词出现在字符串的前面,我们会说它与字符串匹配,除了它的第一个字符不需要完全匹配。在匹配时,返回字符串的前面,否则返回空字符串。因此,对于字符串“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());
    }
4

3 回答 3

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 "";
    }
}
于 2013-11-03T22:20:40.530 回答
1

您的任务是查看字符串 str 是否以 word 开头。但是你不匹配第一个字符。这就是为什么您使用“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。

于 2013-11-03T22:16:31.137 回答
-1
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;
}
于 2015-07-29T10:41:33.073 回答