public static boolean isIn(char[] source, char[] target) {
int targetCount = target.length;
//erst einmal die Länge des zu suchenden Strings
char first = target[0];
//nur zur Vereinfachung das erste Zeichen was wir suchen
int max = source.length - target.length;
//max... Wenn man im String "Hallo" das "lob" sucht kann man darauf verzichten die letzten beiden
//Zeichen zu untersuchen, der gesuchte Begriff kann darin nicht mehr vorkommen
for (int i = 0; i <= max; i++) {
//Alles klar soweit, alle Zeichen durchgehen....
if (source[i] != first) {
//Sofern nicht das Zeichen bereits ein treffer ist
while (++i <= max && source[i] != first)
;
//... und durchlaufen bis man auf eine Übereinstimmung trifft.
//Der Original-Java Stil verlegt das hochzählen halt in den Schleifenkopf
//Das ; als einzige Anweisung ist vollkommen legitim.
//es geht natürlich ne klassischere Schleife
}
//Hier ist also eine Übereinstimmung gefunden
if (i <= max) {
//Es müsen noch genug Zeichen da sein damit der Suchbegriff gefunden werden kann
int j = i + 1;
//plus 1 weil wir vom ersten Zeichen ja schon wissen das es stimmt
int end = j + targetCount - 1;
//bis end muss geprüft werden (also nur sooft wie nötig, bei einem Suchbegriff aus 3
//Zeichen braucht man nur noch die nächsten 2 zu prüfen
for (int k = 0 + 1; j < end && source[j] == target[k];
j++, k++)
//solange die Zeichen von source[j] und target[k] übereinstimmen
//immer ein Zeichen vorrücken.
//int k = 0 +1 ist eine komische Notation wird aber verwendet weil man
//darauf hinweisen will das auch dort (wie bei j) ein Zeichen nach vorn gesprungen wird.
;
if (j == end) {
//Wenn also jetzt die Anzahl der gefundenen Zeichen mit der Länge des Suchbegriffs
//übereinstimmen, ist das Wort komplett gefunden.
return true;
}
}
}
//sonst nüscht...
return false;
}