Вопросы практики Java - PullRequest
1 голос
/ 23 июня 2009

я написал на днях с практическими вопросами, с которыми я застрял, и я снова застрял

Пожалуйста, во-первых, я могу попросить вас не публиковать полные решения.

Вопрос отсюда

http://www.javabat.com/prob/p141494

и читает

Учитывая строку и вторую строку "word", мы скажем, что слово соответствует строке, если оно появляется в начале строки, за исключением того, что его первый символ не обязательно должен совпадать. В случае совпадения верните начало строки или иным образом верните пустую строку. Итак, со строкой «hippo» слово «hi» возвращает «hi», а «xip» возвращает «hip». Слово будет как минимум длиной 1.

startWord («бегемот», «привет») → «привет» startWord («бегемот», «xip») → «бедро» startWord («бегемот», «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 ]

3 голосов
/ 23 июня 2009

Ваша проблема в вашем втором сравнении (общий случай). Вы берете подстроку str до конца str и сравниваете ее с подстрокой слова до конца слова. Однако, если str = "hippo" и word = "xip", "ippo"! = "Ip".

В качестве дополнительного примечания, как только вы исправите второй случай, вам не понадобится первый случай, поскольку он покрыт вторым случаем.

2 голосов
/ 23 июня 2009

у вас есть правильная идея ... просто сравните подстроку str от символа 1 до word.length с подстрокой word от символа 1 до конца слова. если они совпадают, вернуть подстроку от str до word.length .

2 голосов
/ 23 июня 2009

Ваша проблема во втором утверждении IF заключается в том, что вы сравниваете слово со всей подстрокой. Что вы должны сравнить с (после проверки их длины, конечно):

str.substring(1,word.length()).equals(word.substring(1,word.length()))
2 голосов
/ 23 июня 2009

В случае, когда вы игнорируете первый символ, вам нужно сравнить только word.length() - 1 символов - и одинаковую длину как для строки, так и для слова.

Обратите внимание, что вам действительно не нужно проверять случай, когда первая буква точно совпадает, поскольку это подмножество случая, когда вы игнорируете первую букву.

0 голосов
/ 24 июня 2009

Вот отправная точка для вас

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;
    }
}

Если вы сделаете эти тесты успешными, по одному за раз, возможно, это будет проще, чем пытаться решить всю проблему сразу.

0 голосов
/ 24 июня 2009

Попробуйте использовать:

if (str.length() > 0 && str.substring(1).startsWith(word.substring(1))) {

для условного, так как оно намного понятнее. Кроме того, tvanfosson и Darth Eru правы в том, что первое условие с точным соответствием первого символа является посторонним.

0 голосов
/ 23 июня 2009

Попробуйте Regex!

java.lang.String

boolean matches(String regex) 
0 голосов
/ 23 июня 2009

Вы можете попробовать использовать регулярные выражения, начиная со 2-го символа, чтобы увидеть, есть ли совпадение. Вы также можете сделать некоторую подстроку, как я вижу, вы сделали.

В случае границы строки длиной в 1 букву просто жестко закодируйте ее для правильного возврата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...