class LatLong {
static String MINUTE
= "[0-5]?\\d"; static String MINUTE_STRICT
= "[1-5]?\\d"; static String MINUTE_FILL
= "[0-5]\\d";
static String SECOND
= "[0-5]?\\d(\\.\\d+)?"; static String SECOND_STRICT
= "[1-5]?\\d(\\.\\d+)?"; static String SECOND_FILL
= "[0-5]\\d(\\.\\d+)?";
static String DEGREE_LAT
= "[+-]?(?:[0-8]?\\d|90)"; static String DEGREE_LAT_STRICT
= "[+-]?(?:[1-8]?\\d|90)";
static String DEGREE_LONG
= "[+-]?(?:180|1[0-7]\\d|0?\\d?\\d)"; static String DEGREE_LONG_STRICT
= "[+-]?(?:180|1[0-7]\\d|[1-9]?\\d)";
DEGREE_LAT + "[*dD]" + "\\s*" +
MINUTE + "[']" + "\\s*" +
SECOND + "[\"]" + "\\s*" + "[NS]" +
"\\s*" +
DEGREE_LONG + "[*dD]" + "\\s*" +
MINUTE + "[']" + "\\s*" +
SECOND + "[\"]" + "\\s*" + "[EW]";
DEGREE_LAT + "[*dD]" + "\\s*" +
MINUTE + "[']" + "\\s*" +
SECOND + "[\"]" +
"\\s*" +
DEGREE_LONG + "[*dD]" + "\\s*" +
MINUTE + "[']" + "\\s*" +
SECOND + "[\"]";
DEGREE_LAT + ":" +
MINUTE_FILL + ":" +
SECOND_FILL + "\\s*" + "[NS]" +
"\\s*" +
DEGREE_LONG + ":" +
MINUTE_FILL + ":" +
SECOND_FILL + "\\s*" + "[EW]";
public static void main
(String args
[]) {
System.
out.
println("90:00:00.0N 180:00:00.0E".
matches(PAIR_3
));
System.
out.
println("45* 12' 22\"N 46* 12' 22\"E".
matches(PAIR_1
));
System.
out.
println("23* 34' 42\" 124* 34' 42\"".
matches(PAIR_2
)); }
}
Y2xhc3MgTGF0TG9uZyB7CiAgc3RhdGljIFN0cmluZyBNSU5VVEUgPSAiWzAtNV0/XFxkIjsKICBzdGF0aWMgU3RyaW5nIE1JTlVURV9TVFJJQ1QgPSAiWzEtNV0/XFxkIjsKICBzdGF0aWMgU3RyaW5nIE1JTlVURV9GSUxMID0gIlswLTVdXFxkIjsKICAKICBzdGF0aWMgU3RyaW5nIFNFQ09ORCA9ICJbMC01XT9cXGQoXFwuXFxkKyk/IjsKICBzdGF0aWMgU3RyaW5nIFNFQ09ORF9TVFJJQ1QgPSAiWzEtNV0/XFxkKFxcLlxcZCspPyI7CiAgc3RhdGljIFN0cmluZyBTRUNPTkRfRklMTCA9ICJbMC01XVxcZChcXC5cXGQrKT8iOwogIAogIHN0YXRpYyBTdHJpbmcgREVHUkVFX0xBVCA9ICJbKy1dPyg/OlswLThdP1xcZHw5MCkiOwogIHN0YXRpYyBTdHJpbmcgREVHUkVFX0xBVF9TVFJJQ1QgPSAiWystXT8oPzpbMS04XT9cXGR8OTApIjsKICAKICBzdGF0aWMgU3RyaW5nIERFR1JFRV9MT05HID0gIlsrLV0/KD86MTgwfDFbMC03XVxcZHwwP1xcZD9cXGQpIjsKICBzdGF0aWMgU3RyaW5nIERFR1JFRV9MT05HX1NUUklDVCA9ICJbKy1dPyg/OjE4MHwxWzAtN11cXGR8WzEtOV0/XFxkKSI7CiAgCiAgc3RhdGljIFN0cmluZyBQQUlSXzEgPSAKICAgIERFR1JFRV9MQVQgKyAiWypkRF0iICsgIlxccyoiICsKICAgIE1JTlVURSArICJbJ10iICsgIlxccyoiICsgCiAgICBTRUNPTkQgKyAiW1wiXSIgKyAiXFxzKiIgKyAiW05TXSIgKwogICAgIlxccyoiICsgCiAgICBERUdSRUVfTE9ORyArICJbKmREXSIgKyAiXFxzKiIgKwogICAgTUlOVVRFICsgIlsnXSIgKyAiXFxzKiIgKyAKICAgIFNFQ09ORCArICJbXCJdIiArICJcXHMqIiArICJbRVddIjsKICAKICBzdGF0aWMgU3RyaW5nIFBBSVJfMiA9IAogICAgREVHUkVFX0xBVCArICJbKmREXSIgKyAiXFxzKiIgKwogICAgTUlOVVRFICsgIlsnXSIgKyAiXFxzKiIgKyAKICAgIFNFQ09ORCArICJbXCJdIiArIAogICAgIlxccyoiICsgCiAgICBERUdSRUVfTE9ORyArICJbKmREXSIgKyAiXFxzKiIgKwogICAgTUlOVVRFICsgIlsnXSIgKyAiXFxzKiIgKyAKICAgIFNFQ09ORCArICJbXCJdIjsKICAKICBzdGF0aWMgU3RyaW5nIFBBSVJfMyA9IAogICAgREVHUkVFX0xBVCArICI6IiArCiAgICBNSU5VVEVfRklMTCArICI6IiArIAogICAgU0VDT05EX0ZJTEwgKyAiXFxzKiIgKyAiW05TXSIgKwogICAgIlxccyoiICsgCiAgICBERUdSRUVfTE9ORyArICI6IiArCiAgICBNSU5VVEVfRklMTCArICI6IiArCiAgICBTRUNPTkRfRklMTCArICJcXHMqIiArICJbRVddIjsKICAKICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAgICAKICAgIFN5c3RlbS5vdXQucHJpbnRsbigiOTA6MDA6MDAuME4gMTgwOjAwOjAwLjBFIi5tYXRjaGVzKFBBSVJfMykpOwogICAgCiAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjQ1KiAxMicgMjJcIk4gNDYqIDEyJyAyMlwiRSIubWF0Y2hlcyhQQUlSXzEpKTsgCiAgICAKICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMjMqIDM0JyA0MlwiIDEyNCogMzQnIDQyXCIiLm1hdGNoZXMoUEFJUl8yKSk7CiAgfQp9