所以问题是这样的:
给定一个字符串和第二个"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;
}