2016-07-02 7 views
-1

Nehmen wir an, ich habe eine URL von http://192.168.0.123:321 gespeichert. Ich möchte nur extrahieren 192.168.0.123.I kann dies durch die Verwendung dieser Methode url.toString().substring(7,(url.length()-4));Entpacken des Hostnamens/der IP-Adresse von einer URL in Android

Was aber, wenn die gespeicherte URL ist http://192.168.0.1:12? Wie automatisch nur die IP-Adresse, die ich extrahiert? Weil die Methode, die ich würde nur verwendet Anzeige 192.168.0. statt

EDIT ich bin mit Java auf Android Studio

EDIT 2 I verwendet

str = url.toString(); ip = str.substring(str.indexOf('/')+1, str.lastIndexOf(':');

weil der zweite machte mich zum Absturz bringen und ich konnte es nicht Wege

+0

Das Verfahren, bei dem aktualisierten Antwort ist besser;) – n00b

Antwort

1

bearbeiten zu beheben finden! : für Android (Java) verwenden Sie folgenden Code:

(new URL(urlToParse)).getHost(); 

oder wenn Sie bereits ein URL-Objekt nur die getHost() Methode (für Hostname)

getAuthority() haben - (für hostname: port)

für andere Teile konsultieren https://docs.oracle.com/javase/tutorial/networking/urls/urlInfo.html


Was langua ge nützt du?

Wie wäre es mit String.split (':') oder String.lastIndexOf (':') (und Index von '/'), wenn sie in Ihrer Sprache zur Verfügung stehen?

Sie können auch regex - Reguläre Ausdrücke verwenden, aber das könnte ein Overkill für solch eine einfache Aufgabe sein. Aber es ist sicher genauer/richtig.

Auch viele Sprachen bieten URL-Parsing für Sie, um den Hostnamen/IP-Adresse zu extrahieren.

naive Methode:

str = url.toString(); 
ip = str.substring(str.indexOf('/')+1, str.lastIndexOf(':'); 

weniger naive Methode:

str = url.toString(); 
ip = str.split('/')[2].split(':')[0]; 

regex (nur für IP-Adresse basierend URLs):

/$https?:\/\/([0-9\.]*?)(:[0-9]*?)?/ 
+0

, ich benutze Java auf Android Studi o, ich werde die Antwort testen, die du mir gegeben hast und hoffe, dass es funktioniert. Danke! –

+0

Danke! Es funktioniert und das ist genau das, was ich brauchte –

-1
String s = "http://192.168.0.123:321"; 
    s = s.replace("http://", ""); 
    s = s.substring(0, s.indexOf(":")); 

    Output: 192.168.0.123 
+0

Die akzeptierte Antwort für diesen Beitrag ist viel sicherer als das, was Sie vorschlagen. – melwil