Java, Zeichenkette suchen und bis zu einen bestimmten Zeichen herauskopieren?
Ich habe ein String, darin enthalten ist html code. Jetzt möchte ich die darin enthaltenen Links herauskopieren. Die Links starten mit "http" und enden mit ein Gänzefüßchen. Das Problem ist das alles im String ohne Leerzeichen steht.
Ich habe es bereits mit .indexOf("http") probiert. Aber ich müsste noch das Ende definieren, da sonst alles nach "http" ausgegeben wird. Deshalb müsste ich es irgendwie schaffen das bei "http" startet und bei den nächsten Gänzefüßchen endet.
Ich weiß aber nicht wie.
2 Antworten
indexHttp = str.indexOf("http");
indexQuotes = str.indexOf('"', indexHttp+1);
indexHttp ist der Index wo das jeweilige Http steht, indexQuotes ist der Index, wo die nächstes Gänsefüßchen stehen.
Einfach einen Substring von indexHttp zu indexQuotes machen und du hast den Link.
Einfach über alle indexHttp eine Schleife machen und so kriegst du alle Links.
Index gibt -1 zurück wenn es keinen gibt. Folglich einfach eine While-Schleife solange Index >=0.
Der ganze Code würde dann ca. so aussehen (hab noch nicht getestet ob er geht) :
int indexHttp = -1;
int indexQuotes =0;
do {
indexHttp = str.indexOf("http", indexHttp + 1);
indexQuotes = str.indexOf('"', indexHttp)
// Substring bilden und in ein Array speichern
} while (indexHttp >= 0);
Noch eine letzte Frage. Die Links werden jetzt Korrekt ausgegeben. Allerdings kommt die Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
Hast du eine Idee wie ich die Verhindern kann?
das bilden des substrings nur machen wenn indexHttp >= 0.
Also
if(indexHttp >= 0) {
//substring bilden und speichern
}
der Fehler tritt auf weil indexOf beim allerletzten mal immer -1 zurückgibt, und davon natürlich kein Substring gebildet werden kann.
Jetzt funktioniert alles. Danke für deine Hilfe und Geduld
Aber ich müsste noch das Ende definieren, (...)
Dazu gibt es doch eine passende Überladung von indexOf.
Ich würde dir im Übrigen empfehlen, eher einen HTML Parser (wie jsoup) zu nutzen. So machst du es dir einfacher.
Jetzt wird mir ein Link ausgegeben. Aber wie muss die Bedingung der while Schleife sein damit sie nicht unendlich läuft?