J'ai une corde comme:
Bonjour comment comment vas-tu? P>
J'aime les cookies cookies, pommes et crêpes. p> blockQuote>
Je souhaite une sortie: p>
bonjour comment allez-vous? p>
J'aime les cookies, les pommes et les crêpes. p> BlockQuote>
Jusqu'à présent, j'ai codé: p>
xxx pré> i obtenir des sorties comme: p>
Bonjour comment allez-vous vous? p>
J'aime les cookies cookies, pommes et crêpes. p> BlockQuote>
J'ai besoin d'aide avec la logique pour
,. ! ? . code> .. p> p>
3 Réponses :
Vous pouvez utiliser Voici un lien vers la démonstration et l'explication de regex: regex code> pour le faire pour vous. Exemple de code:
\ b code> correspond à une position de la limite de mot entre un caractère de texte et un caractère ou une position sans mot (démarrage / fin de la chaîne). LI>
\ w code> correspond à n'importe quel caractère de mot (alphanumérique et soussecore). LI>
\ b code> correspond à une position de la limite de mot entre un caractère de texte et un caractère ou une position sans mot (démarrage / fin de la chaîne). LI>
\ s code> correspond à n'importe quel caractère blancheur (espaces, onglets, pauses de ligne). LI>
* code> correspondre 0 code> ou plus du jeton précédent. li>
(? = code> correspond à un groupe après l'expression principale sans l'inclure dans le résultat. LI>
. code> correspond à n'importe quel caractère, à l'exception des pauses de la ligne. LI>
\ 1 code> correspond aux résultats du groupe de capture n ° 1 à l'étape 2. LI>
ol>
pouvez-vous s'il vous plaît expliquer la regex pls
Qu'est-ce que nous sommes censés comprendre cela?
J'ai ajouté un lien vers la démo et l'explication que vous pouvez le modifier là-bas pour voir et comparer les résultats
Pourrait vouloir noter que, comme actuellement écrit, cela ne fonctionnera pas si les contractions sont autorisées dans l'entrée. Une entrée de impossible de ne pas code> entraînera un 'ne peut pas code>
Vous devez utiliser une variable secondaire pour stocker vos mots sans la ponctuation.
String[] s = input.split(" ");
String ans = "";
for (int i = 0; i < s.length - 1; i++) {
String currentAux = s[i].replaceAll("[,.!?]", "");
String nextAux = s[i + 1].replaceAll("[,.!?]", "");
if (nextAux.equals(currentAux)) {
continue;
}
ans += " " + s[i];
}
ans += " " + s[s.length - 1];
System.out.println(ans);
Pour "Bonjour comment comment vas-tu?" Code> Il renvoie Bonjour comment allez-vous code>. ? code> manque
@Sandeepranjan l'essayer à nouveau maintenant :)
C'est une bonne réponse, mais je pense que vous devriez ajouter du côlon et du point-virgule dans vos appels à de remplacement code> parce que des phrases telles que "J'ai eu un grand repas de repas; Cependant, j'ai déjà faim de nouveau. " code> ne sera pas traité correctement - repas code> apparaîtra deux fois.
@ D.B. Nous ajoutons beaucoup de symboles, ceux que j'ai utilisés sont ceux demandés à la fin de la question.
Vous pouvez utiliser Vous pouvez essayer ce code SNIPPET: P> java.util.stringtenzerzer code> pour jeton de la gage des mots. Assurez-vous de définir les délimiteurs pour diviser les mots. Dans votre cas, ce sont des espaces, des virgules et des arrêts complets. Cela peut vous aider à scinder les mots sans les marques de ponctuation. Ensuite, vous pouvez comparer le jeton précédent avec le courant et s'ils sont égaux, vous pouvez l'ignorer. String s = "I love cookies cookies, apples and pancakes pancakes.";
StringTokenizer tokenizer = new StringTokenizer(s, " ,.", true);
List<String> duplicateRemovedTokenList = new LinkedList<>();
String prevToken = null;
while (tokenizer.hasMoreTokens()) {
String currentToken = tokenizer.nextToken();
if (currentToken.equals(" ")) {
duplicateRemovedTokenList.add(currentToken);
continue;
}
if (!currentToken.equals(prevToken)) {
duplicateRemovedTokenList.add(currentToken);
prevToken = currentToken;
}
}
String duplicateRemovedString = StringUtils.join(duplicateRemovedTokenList, "");
Cela a quelques problèmes, il ajoute des espaces supplémentaires et ne fonctionne pas avec des entrées telles que "J'aime les biscuits, les biscuits, les pancakes des pommes et des crêpes." Code> (Notez la virgule supplémentaire après le premier cookies code>.
@Jbnizet je trouve votre commentaire impoli, l'auteur de la poste a déclaré qu'il a besoin d'aide avec la logique, ce qui signifie qu'il sait déjà qu'ils ne sont pas les mêmes, et comme il sait déjà que cela donne des problèmes, ce qui le suggère de déboguer ne va pas résoudre le problème
@Jbnizet oui je sais
cookies code> n'est pas égal àcookies, code>. J'ai besoin d'aider avec la logique afin que mon programme le prenne comme la même et ajoute celui avec la ponctuationDuplicailler possible de Comment puis-je éliminer les mots en double de la chaîne dans Java?
Ce dont vous avez besoin est appelé Tobenisation < / i>.
@ TIIJ7, il y avait une mauvaise utilisation de la mise en forme - un style de citation de code pour la citation de texte.
@Mikeb. Alors, qu'est-ce qui a de mauvais formatage pour faire avec les modifications du texte de sortie réel? Vous venez de télécharger le mot "crêpes", faisant de la modification de la sortie attendue et d'invalider la réponse affichée
@Ferrybig, oui, c'était ma faute pendant le formatage du texte. Maintenant tout est corrigé.