2009-10-11 5 views
0

Je voudrais savoir si quelqu'un sait si Java a intégré une bibliothèque pour faire quelque chose comme ceci.Comparaison Word By Word

Par exemple,

J'ai 2 cordes qui sont: String = "Yeahh, j'aime la programmation Java."; Chaîne b = "amour";

Je veux vérifier si la chaîne b qui contient "love" fait partie des jetons de la chaîne a. Par conséquent, je veux demander s'il y a une API Java pour le faire? Je veux quelque chose comme,

a.contains (b) < --------- return true résultat

Y at-il ??? parce que ,,,, s'il n'y a pas d'API Java pour cela, j'écrirais alors mon propre algorithme.

Merci à l'avance pour tout aide .. ^^

Répondre

0

Vous pouvez utiliser la fonction indexOf() dans la bibliothèque de chaîne pour vérifier qu'il:

if(a.indexOf(b)>=0) 
return true; 
+2

Err, il y a un contient (...) dans la chaîne pendant quelques années ! –

+0

Et si vous faites quelque chose comme 'if (boolead) return boolean;' mind aussi faites 'return boolean;'. En d'autres termes: 'return a.indexOf (b)> = 0' –

+0

Bien sûr, c'est juste une question de style. – Corazu

1
string strToCheck = "check me";  
int firstOccurence = strToCheck .indexOf("me"); 
//0 if no any 
+0

Hey, Restuta, merci pour l'info ,,,, Mais alors, si mettre strToCheck .indexOf ("vérifier"); retournera 0 résultat aussi. Mais vous m'avez vraiment rappelé cette méthode indexOf. Merci beaucoup. :) –

+0

Nice pour vous aider, acclame =) – Restuta

1

la méthode contient (CharSequence s) existent dans la classe String.

donc votre a.contains (b) travailleront

+0

haha ​​... Nettogrof ,,, Je ne savais pas que le CharSequence accepte la chaîne même si je savais qu'il y a cette méthode. Vraiment merci d'avoir souligné cela. Appréciez beaucoup. :) –

9

Les suggestions jusqu'à présent (indexOf, contains) sont tous très bien si vous voulez juste trouver des sous-chaînes. Cependant, compte tenu du titre de votre question, je suppose que vous voulez réellement trouver mots. Par exemple, si on vous demandait si "Elle portait des gants noirs" contenait "amour", je suppose que vous voulez que la réponse soit non.

Les expressions régulières sont probablement la meilleure voie à suivre ici, en utilisant une limite de mot autour du mot en question:

import java.util.regex.*; 

public class Test 
{  
    public static void main(String[] args) 
    { 
     System.out.println(containsWord("I love Java", "love")); 
     System.out.println(containsWord("She wore gloves", "love")); 
     System.out.println(containsWord("start match", "start")); 
     System.out.println(containsWord("match at end", "end")); 
    } 

    public static boolean containsWord(String input, String word) 
    { 
     Pattern pattern = Pattern.compile("\\b" + Pattern.quote(word) + "\\b"); 
     return pattern.matcher(input).find(); 
    } 
} 

Sortie:

true 
false 
true 
true 
+0

Salut Jon Skeet, Merci beaucoup homme .. J'apprécie beaucoup pour votre aide. Je suis actuellement en train de faire mon dernier projet en informatique, Plagiarism Analyzer, dont j'ai besoin pour faire du crawler web et ainsi de suite. Le code donné par vous peut être un bon début pour travailler sur l'analyse de texte. Merci encore une fois. :) –

+0

btw, Jon Skeet .. Je n'ai pas vraiment essayé l'utilisation du modèle. Pour gagner du temps, Puis-je vous demander si quelque chose comme, containsWords ("J'aime Java", "I Java") <---- Renvoie vrai aussi Peut-il être fait en utilisant l'objet Motif? Si possible, je voudrais explorer plus pour la manipulation d'objets de modèle. Merci .. :) –

+0

Non, cela retournera faux. Vous pourriez bien être capable de le corriger avec une expression régulière plus complexe, mais je n'ai pas le temps d'essayer de le faire maintenant. –

0

Si vous voulez trouver les mots seront tout à fait facile, il suffit d'utiliser split.

//Split to an array using space as delimiter 
    String[] arrayOfWords = a.split(" "); 

Et puis vous comparez comme:

"love".equalsIgnoreCase(arrayOfWords[i]); 

quelque chose comme ça, vous obtenez l'idée

+1

Cela ne correspondrait pas à "Yeahh" dans ce cas à cause de la virgule. Vous auriez besoin de diviser les limites des mots au lieu de simplement l'espace. –

+1

split a un opérateur "any whitespace", et aussi est-ce supposé être évolutif et/ou est-ce l'apprentissage et l'amélioration des compétences. La raison pour laquelle je suis une sorte de mot compte dans une compétence de base qui est nécessaire encore et encore. David Eck a une mise en œuvre particulièrement bonne, l'apostrophe 's' à la fin de quelques mots fait un travail vraiment difficile. Il existe de nombreuses structures de données qui peuvent faire ce que vous voulez de différentes manières. Commencez avec HashMap ou quelque chose, travaillez jusqu'à ce que vous soyez coincé, faites le nous savoir. –

+0

Wow, merci MexicanHacker pour l'idée d'une autre manipulation de la méthode String et aussi Jon Skeet et Nicholas Jordan pour avoir mis en évidence des problèmes importants. :) –