Próbuję przekonwertować ciągi znaków na Inetaddress
. Nie próbuję rozwiązywać nazw hostów: ciągi są adresami IPv4. Czy działa InetAddress.getByName(String host)
? Czy muszę ręcznie je analizować?Czy istnieje prosty sposób przekonwertowania ciągu znaków na inetadres w języku Java?
Odpowiedz
com.google.common.net.InetAddresses.forString(String ipString)
jest lepsze dla tego, ponieważ nie zrobi wyszukiwanie DNS, niezależnie od tego, co łańcuch jest przekazywany do niego.
Tak, to zadziała. The API jest bardzo jasne na ten temat ("Nazwa hosta może być nazwą komputera, na przykład" java.sun.com "lub tekstową reprezentacją jego adresu IP.") I oczywiście można łatwo sprawdzić samemu.
Dzięki, spojrzałem w górę api i nieodebranych tej linii. – TiansHUo
Co jeśli host ma wzorzec podobny do 192.168.0. *? Czy to też zadziała? Odnośnie do dokumentu Inet4Address wydaje się, że jest to wsparcie. – Paranaix
@Paranaix, nie, rzuci "IllegalArgumentException" z komunikatem "Niepoprawna specyfikacja hosta" –
Możesz spróbować using a regular expression to filter-out non-numeric IP addresses przed przekazaniem String
do getByName()
. Wtedy getByName()
nie spróbuje rozpoznawać nazw.
uwaga: wydaje się, że podczas analizowania nieprawidłowy adres, takie jak InetAddress.getByName("999.999.999.999"
) będzie nie wynik w drodze wyjątku, jak można by oczekiwać od frazy dokumentacji jest:
ważność formacie adresu sprawdza
empirycznie, ja znajduję się coraz instancję InetAddress z surowego adresu IP komputera lokalnego i nieprawidłowy adres IP jako nazwę hosta. Z pewnością nie tego oczekiwałem!
Od wersji Java 7 spowoduje to wygenerowanie wyjątku UnknownHostException; nie sprawdziłem wcześniejszego JavaScriptu, ale spodziewałbym się tam również wyjątku. –
The open-source IPAddress Java library zweryfikuje wszystkie standardowe reprezentacje IPv6 i IPv4 i zrobi to bez wyszukiwania DNS. Zastrzeżenie: jestem kierownikiem projektu tej biblioteki.
Poniższy kod zrobi co prosisz:
String s = "1.2.3.4";
try {
IPAddressString str = new IPAddressString(s);
IPAddress addr = str.toAddress();
InetAddress inetAddress = addr.toInetAddress(); //IPv4 or IPv6
if(addr.isIPv4() || addr.isIPv4Convertible()) {//IPv4 specific
IPv4Address ipv4Addr = addr.toIPv4();
Inet4Address inetAddr = ipv4Addr.toInetAddress();
//use address
}
} catch(AddressStringException e) {
//e.getMessage has validation error
}
- 1. Czy istnieje prosty lub piękny sposób na odwrócenie ciągu znaków?
- 2. Parsowanie ciągu znaków w języku C#; czy istnieje czystszy sposób?
- 3. Sortowanie pojedynczego ciągu znaków w języku Java
- 4. Czy istnieje prosty sposób na uzyskanie rozmiaru obiektu java?
- 5. Czy istnieje prosty sposób przekonwertowania czasu trwania ISO 8601 na timedelta?
- 6. Java: czy istnieje prosty sposób na wybranie podzbioru tablicy?
- 7. Czy istnieje prosty sposób uzyskania liczby znaków drukowanych w C++?
- 8. Czy istnieje sposób przekonwertowania zmiennej funkcji na ciąg znaków w D?
- 9. Czy istnieje sposób automatycznego przekonwertowania skryptu Greasemonkey na skryptozakładkę?
- 10. najszybszy sposób na znalezienie ciągu znaków w języku C#?
- 11. Czy istnieje lepszy sposób zliczania występowania char w ciągu znaków?
- 12. Czy istnieje prosty sposób porównywania wystąpień BufferedImage?
- 13. Java: Najprostszy sposób na uzyskanie ostatniego słowa w ciągu znaków
- 14. Jak zamienić pierwsze wystąpienie ciągu znaków w języku Java?
- 15. Podstawowe pytanie w języku Java: Równość ciągu znaków
- 16. Czy istnieje sposób przekonwertowania aplikacji konsoli do aplikacji formularzy systemu Windows w języku C#?
- 17. Czy istnieje prosty sposób na ocenę JavaScript w WebStorm?
- 18. Czy istnieje prosty sposób na autouzupełnianie bloków zmiennych w Xcode?
- 19. Czy istnieje prosty sposób na uzyskanie wymiarów obrazu w Ruby?
- 20. Czy istnieje prosty sposób na wykonywanie wielowierszowych ciągów w Ruby?
- 21. Czy w języku Java istnieje odpowiednik epollu?
- 22. Czy istnieje prosty sposób na uzyskanie parametrów ciągu zapytania z identyfikatora URI w systemie Windows Phone?
- 23. Czy istnieje sposób przekonwertowania obiektu Ember do zwykłego obiektu javascript?
- 24. Uruchom kod z ciągu znaków w języku Java
- 25. Czy istnieje sposób przekonwertowania pliku XML Cobertury do raportu HTML?
- 26. Istnieje prosty sposób na uzyskanie znaku z ciągu wielobajtowego w PHP?
- 27. Oblicz szerokość wyświetlania ciągu znaków w języku Java
- 28. Czy istnieje sposób sprawdzenia, czy ciąg znaków Unicode zawiera jakąkolwiek chińską/japońską czcionkę w języku Python?
- 29. MySql - sposób na aktualizację części ciągu znaków?
- 30. Czy istnieje odpowiednik frexp w języku Java?
To jest część [Guawy] (http://docs.guava-libraries.googlecode.com/git-history/v10.0.1/javadoc/com/google/common/net/InetAddresses.html). –
Powinien to być "com.google.common.net.InetAddresses.forString' (z' InetAddresses' z wielką literą A). SO nie pozwoli mi to poprawić w Twojej odpowiedzi, ponieważ edycja musi składać się z co najmniej 6 znaków. ;-) W każdym razie, dziękuję, szukałem tego i jeszcze raz Guava ratuje dzień. – silmeth