Je cherche à govery une requête de recherche similaire à la façon dont Google fait-il. Par exemple, si j'ai la requête de recherche suivante:
the quick brown fox jumps over the lazy dog
4 Réponses :
Go Char par caractère à la chaîne comme ceci: (sorte de pseudo code)
Je pense que c'est à peu près ce que je pensais si la regex n'est pas suffisante. Cependant, je très fortement b> recommande que le mot ne soit pas une chaîne. Vous allez allouer des cordes comme fous en raison de l'immutabilité des cordes. Mieux vaut faire de mot un constructeur de cordes ou même un éventail de caractères.
Vous avez raison. Mais c'était pseudo code. Il s'agit du principe.
Jusqu'à présent, cela ressemble à un bon candidat pour les regex. Si cela devient significativement plus compliqué, un schéma de jobenisation plus complexe peut être nécessaire, mais vous devez éviter cet itinéraire sauf si nécessaire, car il s'agit de manière significative plus de travail. (D'autre part, pour les schémas complexes, la regex devient rapidement un chien et devrait également être évitée).
Cette regex devrait résoudre votre problème: p> ici est un exemple C # de son utilisation: p> Le bénéfice réel de cette méthode est peut-être facilement éventuel pour inclure votre "-" exigence comme suit: P> (
-"[^"]+"
|
"[^"]+"
|
-\w+
|
\w+
)\s*
J'essayais juste de comprendre comment faire cela il y a quelques jours. J'ai fini par utiliser microsoft.visalbasic.fileio.textfieldParse qui a fait exactement ce que je voulais (il suffit de définir des hagfieldsloseDinquotes à vrai). Bien sûr, il semble quelque peu étrange d'avoir "Microsoft.VisualBasic" dans un programme C #, mais cela fonctionne, et autant que je puisse le dire, fait partie de la structure .NET. P>
Pour obtenir ma chaîne dans un flux pour le TextfieldParser, j'ai utilisé "Nouveau MemoryStream (Nouveau asciiencoding (). Getbytes (Stringvar))". Je ne sais pas si c'est la meilleure façon de le faire. P>
Edit: Je ne pense pas que cela gérerait votre "-" exigence, alors peut-être que la solution de regex est meilleure p>
Je cherchais une solution Java à ce problème et je suis proposé une solution utilisant @Michael La VOIE's. Pensais que je partagerais ici malgré la question posée en C #. J'espère que ça va.
public static final List<String> convertQueryToWords(String q) { List<String> words = new ArrayList<>(); Pattern pattern = Pattern.compile("(\"[^\"]+\"|\\w+)\\s*"); Matcher matcher = pattern.matcher(q); while (matcher.find()) { MatchResult result = matcher.toMatchResult(); if (result != null && result.group() != null) { if (result.group().contains("\"")) { words.add(result.group().trim().replaceAll("\"", "").trim()); } else { words.add(result.group().trim()); } } } return words; }
Dans votre syntaxe, le caractère de quote double (") peut-il être utilisé n'importe où ailleurs en plus d'indiquer un jeton multi-mots?
À mes fins, non, cela ne peut pas.