Suchen Sie alle vorkommen von substring in string in Java
Ich versuche zu finden, alle vorkommen eines Teilstrings in einem string in Java.
Zum Beispiel:
Suche nach "ababsdfasdfhelloasdf" für "asdf" zurückkehren würde, [8,17] da gibt es 2 "asdf"'s, einem an position 8 und eine am 17.
Suche nach "aaaaaa" für "aa" zurückkehren würde, [0,1,2,3,4], weil es ist ein "aa" - an den Positionen 0,1,2,3, und 4.
Habe ich versucht, dieses:
public List<Integer> findSubstrings(String inwords, String inword) {
String copyOfWords = inwords;
List<Integer> indicesOfWord = new ArrayList<Integer>();
int currentStartIndex = niwords.indexOf(inword);
int indexat = 0;
System.out.println(currentStartIndex);
while (cthing1 > 0) {
indicesOfWord.add(currentStartIndex+indexat);
System.out.println(currentStartIndex);
System.out.println(indicesOfWord);
indexat += cthing1;
copyOfWords = copyOfWords.substring(cthing1);
System.out.println(copyOfWords);
cthing1 = copyOfWords.indexOf(inword);
}
Dieses problem kann gelöst werden, in Python wie folgt:
indices = [m.start() for m in re.finditer(word, a.lower())]
wo "Wort" ist das Wort, das ich Suche, und "a" ist die Zeichenfolge, ich bin auf der Suche durch.
Wie kann ich erreichen, das in Java?
- Ich denke, die top-post hier kann Ihnen dabei helfen. Für die Indizes, nur drucken oder speichern Sie die
lastIndex
wie Sie Sie erhalten. - Meinst du, dass Sie brauchen, sowas?
- Nutzen Sie bitte aussagekräftigere Variablennamen. Es ist schwer zu verstehen, was
cthing1
oderoutthing
oderniwords
bedeuten. Verwendung Dinge wielastIndex
,indexList
usw. Würde es leichter machen, zu verstehen, was du geschrieben hast und es korrigieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Erfassung innen eine positive look-ahead, um alle überlappenden Treffern und verwenden
Matcher#start
zu Holen Sie sich die Indizes der erfassten Teilzeichenfolgen.Als für der regex, wird es Aussehen wie
In Java-code:
Ergebnis:
Sehen IDEONE demo
Mithilfe von regex ist definitiv eine allzu schwere Lösung für die Suche nach Teilzeichenfolgen zurückgegeben, und es wird vor allem ein problem, wenn Ihre substring enthält spezielle regex-Zeichen wie
.
. Hier ist eine angepasste Lösung aus diese Antwort: