我前几天发布了练习题,我被困住了,我又被卡住了
首先我可以请你不要发布完整的解决方案。
问题来自这里
http://www.javabat.com/prob/p141494
并读取
给定一个字符串和第二个“单词”字符串,如果它出现在字符串的前面,我们会说该字符串匹配,除了它的第一个字符串不需要完全匹配。在匹配项上,返回字符串的前面,否则返回空字符串。所以,使用字符串“hippo”,单词“hi”返回“hi”,“xip”返回“hip”。这个词至少是长度为1.
startWord(“hippo”,“hi”)→“hi” startWord(“hippo”,“xip”)→“hip” startWord(“hippo”,“i”)→“h”
我变得非常困难,问题的措辞对我没有帮助!这是我到目前为止的代码
public String startWord(String str, String word)
{
if (str.startsWith(word)){
return str.substring(0, word.length());
}
if (str.substring(1, str.length()).equals(word.substring(1, word.length()))){
return str.substring(0, word.length());
}
return "";
}
希望有人可以用指针或2来帮助我,谢谢你的帮助
答案 0 :(得分:3)
您的问题出在第二次比较中(一般情况)。你将str的子字符串带到str的末尾,并将它与word的子字符串与word的结尾进行比较。但是,如果str =“hippo”和word =“xip”,“ippo”!=“ip”。
作为补充说明,一旦你修复了第二种情况,你就不会真正需要第一种情况,因为它是第二种情况所涵盖的。
答案 1 :(得分:2)
如果您忽略第一个字符,则只想比较word.length() - 1
个字符 - 字符串和单词的长度相同。
请注意,您确实不需要测试第一个字母完全匹配的情况,因为这是您忽略第一个字母的情况的子集。
答案 2 :(得分:2)
您的第二个IF语句中的问题是您将该单词与整个子字符串进行比较。你应该把它与它(在检查它们的长度当然)之后进行比较是:
str.substring(1,word.length()).equals(word.substring(1,word.length()))
答案 3 :(得分:2)
你在那里有正确的想法......只需将 str 的子字符串从字符1与 word.length 比较为 word <的子字符串< / strong>从字符1到单词结尾。 如果匹配则返回 str 的子字符串为 word.length 。
答案 4 :(得分:0)
尝试使用:
if (str.length() > 0 && str.substring(1).startsWith(word.substring(1))) {
对于条件,因为它更清楚。此外,tvanfosson和Darth Eru是正确的,第一个角色与第一个角色的完全匹配是无关紧要的。
答案 5 :(得分:0)
这是你的起点
import junit.framework.TestCase;
public class HippoTest extends TestCase {
public void testActualStart() throws Exception {
assertEquals("hi", startWord("hippo", "hi"));
}
public void testSimilarStart() throws Exception {
assertEquals("xip", startWord("hippo", "hip"));
assertEquals("h", startWord("i", "hip"));
}
public void testWrongStart() throws Exception {
assertEquals("", startWord("hippo", "hx"));
}
private String startWord(String string, String string2) {
// TODO Auto-generated method stub
return null;
}
}
如果你让这些测试用例一次一个地通过,也许比一次解决整个问题更容易。
答案 6 :(得分:-2)
您可以尝试使用正则表达式,从第2个字符开始,查看是否存在匹配项。你也可以做一些子串,正如我看到的那样。
对于1个字母长的字符串的边界情况,只需硬编码即可正确返回。
答案 7 :(得分:-2)
试试Regex!
java.lang.String
boolean matches(String regex)