2009-06-23 8 views
1

i posté l'autre jour avec des questions pratiques que je commençais à me coincé avec et je suis coincé à nouveaudes questions Java pratique

S'il vous plaît tout d'abord je peux vous demander des solutions complètes DonT poster.

La question est d'ici

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

et lit

d'une chaîne et une deuxième chaîne « mot », on va dire que le mot correspond à la chaîne si elle apparaît au avant de la chaîne, sauf son premier caractère n'a pas besoin de correspondre exactement. Sur une correspondance, retournez le début de la chaîne ou sinon renvoyez la chaîne vide. Ainsi, avec la chaîne "hippo", le mot "hi" renvoie "hi" et "xip" renvoie "hip". Le mot sera au moins la longueur 1.

startWord ("Hippo", "salut") → "salut" startWord ("Hippo", "XIP") → "hip" startWord ("Hippo", " i ") →" h "

Je suis très coincé, le libellé de la question ne m'aide pas! Voici le code que j'ai jusqu'à présent

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

espérons que quelqu'un pourra me aider avec un pointeur ou 2, je vous remercie de l'aide

+0

Que signifie "n'a pas besoin de correspondre exactement"? – samoz

+0

@samoz, les conditions pour "ne pas correspondre exactement" sont expliquées dans la question. Correspondances de mots String iff La chaîne commence par Word ou String commence par Xord, où Xord est Word avec la première lettre modifiée. – Sean

+0

pas tout à fait sûr où je devrais poster que je pense que je l'ai fait maintenant, mais c'est ici !! merci pour toute l'aide les gars! et oui je l'ai fait avant que vous me disiez amischiefr même que j'ai demandé des conseils et pas des solutions :) –

Répondre

3

Votre problème est dans votre deuxième comparaison (le cas général). Vous prenez une sous-chaîne de str à la fin de str, et en le comparant avec une sous-chaîne de mot à la fin du mot. Cependant, si str = "hippo" et word = "xip", "ippo"! = "Ip". En guise de note supplémentaire, une fois que vous aurez résolu le second cas, vous n'aurez pas vraiment besoin du premier cas, car il est couvert par le second cas.

-2

Vous pouvez essayer d'utiliser des expressions régulières, à partir du 2ème personnage, pour voir s'il y a un match. Vous pouvez également faire une sorte de sous-chaîne, comme je vois que vous avez fait.

Pour le cas limite d'une chaîne longue de 1 lettre, il vous suffit de la coder en dur pour qu'elle s'affiche correctement.

2

Dans le cas où vous ignorez le premier caractère, vous voulez seulement comparer word.length() - 1 caractères - et la même longueur pour la chaîne et le mot.

Notez que vous n'avez pas vraiment besoin de tester le cas où la première lettre correspond exactement car c'est un sous-ensemble du cas où vous ignorez la première lettre.

-2

Essayez Regex!

java.lang.String 

boolean matches(String regex) 
2

Votre problème dans votre deuxième instruction IF est que vous comparez le mot à la sous-chaîne entière. Ce que vous devez comparer à (après avoir vérifié leur longueur bien sûr) est:

str.substring(1,word.length()).equals(word.substring(1,word.length())) 
+0

Ce que je disais sauf que vous l'avez donné! ;) L'OP a demandé des conseils, pas la solution exacte. – Sean

2

vous avez l'idée là ... il suffit de comparer une sous-chaîne de str de caractère 1 à word.length à une sous-chaîne de le mot du caractère 1 à la fin du mot. si elles correspondent renvoyer la sous-chaîne de str à word.length.

0

Essayez d'utiliser:

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

pour le conditionnel car il est beaucoup plus claire. De plus, tvanfosson et Dark Eru ont raison de dire que le premier conditionnel avec la correspondance exacte sur le premier caractère est étranger.

0

est ici un point de départ pour vous

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

Si vous faites ces cas de test passent, un à la fois, ce sera peut-être plus facile que d'essayer de résoudre le problème à la fois.