J'essaie de simplement se débarrasser de double mots consécutifs à partir d'un fichier texte, et quelqu'un a dit que je pouvais faire quelque chose comme ceci:Motif, matcher en Java, REGEX aide
Pattern p = Pattern.compile("(\\w+) \\1");
StringBuilder sb = new StringBuilder(1000);
int i = 0;
for (String s : lineOfWords) { // line of words is a List<String> that has each line read in from txt file
Matcher m = p.matcher(s.toUpperCase());
// and then do something like
while (m.find()) {
// do something here
}
J'ai essayé de regarder le m.end pour voir si je pourrais créer une nouvelle chaîne, ou enlever le (s) article (s) où les allumettes sont, mais je n'étais pas sûr comment cela fonctionne après avoir lu la documentation. Par exemple, en cas de test pour voir comment cela a fonctionné, je l'ai fait:
if (m.find()) {
System.out.println(s.substring(i, m.end()));
}
Pour le fichier texte qui a: This is an example example test test test.
Pourquoi ma sortie This is
?
Edit:
si j'ai un lineOfWords de AraryList qui lit chaque ligne à partir d'une ligne de fichier txt, puis créer un nouveau ArrayList pour contenir la chaîne modifiée. Par exemple
List<String> newString = new ArrayList<String>();
for (String s : lineOfWords {
s = s.replaceAll(code from Kobi here);
newString.add(s);
}
mais alors il ne me donne pas les nouveaux, mais l'original s. Est-ce à cause de la copie peu profonde ou profonde?
Qu'est-ce que 'i' dans ce second fragment? Il n'y a aucune trace nulle part ailleurs dans le code que vous montrez ... –
Désolé, je suis égal à 0, je l'ai ajouté. – Crystal
Salut, Crystal. Il est préférable de poser une nouvelle question dans ce cas, c'est vraiment une autre question sur un autre sujet. (sur une note pertinente - quand j'ai étudié Java, il n'y avait pas de génériques ni de boucles foreach ': P') – Kobi