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