Java练习题

时间:2009-06-23 19:39:45

标签: java

我前几天发布了练习题,我被困住了,我又被卡住了

首先我可以请你不要发布完整的解决方案。

问题来自这里

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来帮助我,谢谢你的帮助

8 个答案:

答案 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)