如何验证地理坐标?

How to validate geographic coordinates?

我正在尝试验证 JTextField 的文本。此文本字段的内容应类似于 66.160507, -153.36914166.160507,-153.369141(逗号后没有空格)。 到目前为止,我只验证纬度和经度的范围。 这里:

 String [] splitted = jtextField.getText().split(",");
 double latitude = Double.parseDouble(splitted[0]);
 double longitude = Double.parseDouble(splitted[1])

if(latitude < -90 || latitude > 90)
  return false;
else
  continue;

if(longitude < -180 || longitude > 180)
      return false;
    else
      continue;

但现在如何检查 JTextField 中的文本格式和顺序是否正确?我需要验证这两种情况:

must be a double -> must be a comma -> must be a whitespace -> must be a double 
must be a double -> must be a comma -> must be a double 

一种选择是使用正则表达式来验证文本字段中内容的形式。您可以在 the Javadoc for the Pattern class 阅读可以在正则表达式中使用的不同符号,但您可能会使用的一些符号是

  • * 之前发生的任意数量的匹配(包括 none);
  • + 一场或多场之前的比赛;
  • ? 零个或一个之前的匹配项;
  • [ ] 字符范围。
  • \. 一个点(反斜杠如果在 Java String 文字中则需要转义),
  • \s 任何空格(这个反斜杠也需要在 String 文字中转义)。

把这些放在一起你可能会想出这样的正则表达式。

-?[1-9][0-9]*(\.[0-9]+)?,\s*-?[1-9][0-9]*(\.[0-9]+)?

匹配一对经纬度。

这匹配

  • 可选减号,
  • 第一个数字不是 0,
  • 任意数量的其他数字(甚至none),
  • 可选,一个由小数点组成的序列,然后是任意数量的其他数字,
  • 一个逗号,
  • 任意数量的空白字符(甚至none),
  • 本段中的前四个要点,重复一遍。

你可以这样写代码。

String textValue = jtextField.getText();
String twoDoublesRegularExpression = "-?[1-9][0-9]*(\.[0-9]+)?,\s*-?[1-9][0-9]*(\.[0-9]+)?";

if (textValue.matches(twoDoublesRegularExpression)) {
    // this value is OK
}