如何验证地理坐标?

时间:2018-06-19 22:52:08

标签: java swing validation gps 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 

1 个答案:

答案 0 :(得分:2)

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

  • *与之前进行的任何数量的匹配(包括无);
  • +与以前的比赛有一个或多个比赛;
  • ?之前的匹配项为零或一;
  • [ ]一系列字符。
  • \.一个点(如果使用Java String文字,则需要转义反斜杠),
  • \s任何空格(并且反斜杠也需要转义String文字)。

将所有内容放在一起,您可能会想到这样的正则表达式。

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

匹配一对经纬度。

这符合

  • 可选的减号,
  • 第一个数字为0以外的数字
  • 任意数量的其他数字(偶数),
  • (可选)由小数点然后是任意数量的其他数字组成的序列
  • 逗号
  • 任意数量的空格字符(甚至没有),
  • 本段的前四个要点,全部重复。

然后您可以编写这样的代码。

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
}