Cela devrait imprimer la liste des postes sans -1
la fin que la solution de Peter Lawrey a eue.
int index = word.indexOf(guess);
while (index >= 0) {
System.out.println(index);
index = word.indexOf(guess, index + 1);
}
Cela peut également être fait en for
boucle:
for (int index = word.indexOf(guess);
index >= 0;
index = word.indexOf(guess, index + 1))
{
System.out.println(index);
}
[Note: si guess
peut être plus long qu'un seul caractère, alors il est possible, en analysant la guess
chaîne, de boucler word
plus vite que les boucles ci-dessus. La référence pour une telle approche est l' algorithme de Boyer-Moore . Cependant, les conditions qui favoriseraient l’utilisation d’une telle approche ne semblent pas réunies.]
indexOf
renvoie -1 lorsque le caractère n'est pas trouvé.-1
à la fin est que lado
boucle exécute le corps et le découvre ensuiteindex == -1
à la finwhile
.Le résultat serait utilisé comme ceci:
Ou sous forme de tableau:
la source
Avec Java9, on peut utiliser les éléments
iterate(int seed, IntPredicate hasNext,IntUnaryOperator next)
suivants: -la source
la source
Cela peut être fait de manière fonctionnelle avec Java 9 en utilisant une expression régulière:
Voici la solution Kotlin pour ajouter cette logique en tant que nouvelle méthode dans l'
CharSequence
API à l'aide de la méthode d'extension:la source
la source
word.substring(word)
ne compile pas. : Pla source
Aussi, si vous voulez trouver tous les index d'une chaîne dans une chaîne.
la source
guess
c'était"aba"
etword
était"ababa"
, il n'est pas clair si leguess
se produit une ou deux fois dansword
. (Je veux dire, il est clair que l'on peut trouver àguess
partir de deux positions distinctes, mais comme les occurrences se chevauchent, il n'est pas clair si elles doivent toutes deux être comptées.) Cette réponse considère que les occurrences qui se chevauchent ne sont pas comptées comme distinctes. Bien sûr, puisque le libellé de OP suggère fortement qu'ilguess
aura toujours la longueur 1, l'ambiguïté ne se pose pas.J'ai eu ce problème aussi, jusqu'à ce que je trouve cette méthode.
Cette méthode peut être utilisée pour rechercher des index de n'importe quel indicateur de n'importe quelle longueur dans une chaîne, par exemple:
la source
Une classe pour fendre les cordes que j'ai inventée. Un court test est fourni à la fin.
SplitStringUtils.smartSplitToShorterStrings(String str, int maxLen, int maxParts)
sera divisé par des espaces sans casser les mots, si possible, et sinon, sera divisé par des index selon maxLen.Autres méthodes fournies pour contrôler la façon dont il est divisé:
bruteSplitLimit(String str, int maxLen, int maxParts)
,spaceSplit(String str, int maxLen, int maxParts)
.Code de test simple:
la source
Ceci est une solution java 8.
la source
Cela peut être fait en itérant
myString
et en déplaçant lefromIndex
paramètre dansindexOf()
:la source
mySubstring
, indépendamment du fait que l'mySubstring
on puisse trouver à chaque position. Pas du tout ce que voulait OP ..Essaye ça
la source