I want to check if a string is a hostname or an ip-address in Java. Is there an API to do it or must I write a parser myself?
The problem is complex because there are IPv4 addresses, short and long IPv6 addresses, short hostnames and FQDN host names.
While you could theoretically write rules to handle these cases yourself, using the usual cadre of RFCs, I'd instead look at the entirety of this class in Google Guava, especially the corner cases, such as how it resolves the embedding of 4-in-6 addresses.
As for determining if you have a FQDN, see if coercion to IP address fails, then try to resolve it against DNS. Anything else should, given your input cases, be a hostname or local resolution that isn't fully qualified.