/*
Parsear Geo Uri en Java
https://es.stackoverflow.com/q/117661/127
*/
import java.util.regex.Matcher ;
import java.util.regex.Pattern ;
class Ideone
{
private static void parsearGeoURI
( String s
) {
final String r
= "^geo:([-+]?\\ d+(?:\\ .\\ d+)?),([-+]?\\ d+(?:\\ .\\ d+)?)(?:\\ ?z=(\\ d{1,2}))?$" ; final Pattern p = Pattern.compile ( r) ;
final Matcher m = p.matcher ( s) ;
if ( m.find ( ) ) // Coincide con el regex
{
lon = m.group ( 2 ) ,
zoom = m.group ( 3 ) ;
if ( zoom == null ) // Si no tiene zoom, no captura el 3er grupo del regex
{
zoom = "no tiene" ;
}
"URI: %s%nLatitud: %s%nLongitud: %s%nZoom: %s%n%n" ,
s, lat, lon, zoom
) ;
}
else
{
System .
out .
format ( "URI: %s%n no es una geo URI%n%n" , s
) ; }
}
{
// Pruebas
"geo:79.786971,-124.399677" ,
"geo:79.786971,-124.399677?z=99" ,
"geo:79.786971,-124.399677?z=9999999" ,
"geo:-1234,+456?z=01" ,
"geo:-123456?z=01" ,
"geo:1੨,-3๔5"
} ;
{
parsearGeoURI( prueba) ;
}
}
}
LyoKCVBhcnNlYXIgR2VvIFVyaSBlbiBKYXZhCglodHRwczovL2VzLnN0YWNrb3ZlcmZsb3cuY29tL3EvMTE3NjYxLzEyNwoqLwoKaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwppbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47CgoKY2xhc3MgSWRlb25lCnsKICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcGFyc2Vhckdlb1VSSShTdHJpbmcgcykKICAgIHsKICAgICAgICBmaW5hbCBTdHJpbmcgIHIgPSAiXmdlbzooWy0rXT9cXGQrKD86XFwuXFxkKyk/KSwoWy0rXT9cXGQrKD86XFwuXFxkKyk/KSg/OlxcP3o9KFxcZHsxLDJ9KSk/JCI7CiAgICAgICAgZmluYWwgUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKHIpOwogICAgICAgIGZpbmFsIE1hdGNoZXIgbSA9IHAubWF0Y2hlcihzKTsKICAgICAgICAKICAgICAgICBpZiAobS5maW5kKCkpIC8vIENvaW5jaWRlIGNvbiBlbCByZWdleAogICAgICAgIHsKICAgICAgICAgICAgU3RyaW5nIGxhdCAgPSBtLmdyb3VwKDEpLAogICAgICAgICAgICAgICAgICAgbG9uICA9IG0uZ3JvdXAoMiksCiAgICAgICAgICAgICAgICAgICB6b29tID0gbS5ncm91cCgzKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh6b29tID09IG51bGwpIC8vIFNpIG5vIHRpZW5lIHpvb20sIG5vIGNhcHR1cmEgZWwgM2VyIGdydXBvIGRlbCByZWdleAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB6b29tID0gIm5vIHRpZW5lIjsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoCiAgICAgICAgICAgICAgICAiVVJJOiAgICAgICVzJW5MYXRpdHVkOiAgJXMlbkxvbmdpdHVkOiAlcyVuWm9vbTogICAgICVzJW4lbiIsCiAgICAgICAgICAgICAgICBzLCBsYXQsIGxvbiwgem9vbQogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiVVJJOiAgICAgICVzJW4gbm8gZXMgdW5hIGdlbyBVUkklbiVuIiwgcyk7CiAgICAgICAgfQogICAgfQogICAgCiAgICAKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgogICAgewogICAgICAgIC8vIFBydWViYXMKICAgICAgICBmaW5hbCBTdHJpbmdbXSBwcnVlYmFzID0gewogICAgICAgICAgICAiZ2VvOjc5Ljc4Njk3MSwtMTI0LjM5OTY3NyIsCiAgICAgICAgICAgICJnZW86NzkuNzg2OTcxLC0xMjQuMzk5Njc3P3o9OTkiLAogICAgICAgICAgICAiZ2VvOjc5Ljc4Njk3MSwtMTI0LjM5OTY3Nz96PTk5OTk5OTkiLAogICAgICAgICAgICAiZ2VvOi0xMjM0LCs0NTY/ej0wMSIsCiAgICAgICAgICAgICJnZW86LTEyMzQ1Nj96PTAxIiwKICAgICAgICAgICAgImdlbzox4KmoLC0z4LmU77yVIgogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgZm9yIChTdHJpbmcgcHJ1ZWJhOiBwcnVlYmFzKQogICAgICAgIHsKICAgICAgICAJcGFyc2Vhckdlb1VSSShwcnVlYmEpOwogICAgICAgIH0KICAgIH0KfQ==