Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何验证地理坐标?_Java_Swing_Validation_Gps_Coordinates - Fatal编程技术网

Java 如何验证地理坐标?

Java 如何验证地理坐标?,java,swing,validation,gps,coordinates,Java,Swing,Validation,Gps,Coordinates,我正在尝试验证JTextField的文本。此文本字段的内容应如下所示66.160507,-153.369141或66.160507,-153.369141(逗号后无空格)。 到目前为止,我只验证了纬度和经度的范围。 在这里: 一种选择是使用正则表达式验证文本字段中内容的形式。您可以在上阅读可以在正则表达式中使用的不同符号,但某些可能使用的符号可能是 *前面的匹配项的任意数量(包括无) +前面的一个或多个匹配项 ?与前面的内容零或一个匹配 []一系列字符 \.一个点(如果反斜杠在Java字符串中

我正在尝试验证
JTextField
的文本。此文本字段的内容应如下所示
66.160507,-153.369141
66.160507,-153.369141
(逗号后无空格)。 到目前为止,我只验证了纬度和经度的范围。 在这里:


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

  • *
    前面的匹配项的任意数量(包括无)
  • +
    前面的一个或多个匹配项
  • 与前面的内容零或一个匹配
  • []
    一系列字符
  • \.
    一个点(如果反斜杠在Java
    字符串中,则需要转义)
  • \s
    任何空白(此反斜杠也需要在
    字符串中转义)
把这些放在一起,你可能会得到这样一个正则表达式

-?[1-9][0-9]*(\.[0-9]+)?,\s*-?[1-9][0-9]*(\.[0-9]+)?
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
}
匹配一对经纬度

这和

  • 可选的减号
  • 第一位数字为0以外的数字
  • 任意数量的其他数字(偶数无)
  • (可选)由一个小数点组成的序列,然后是任意数量的其他数字
  • 逗号
  • 任意数量的空白字符(偶数无)
  • 这一段的前四个要点,全部重述一遍
然后可以编写这样的代码

-?[1-9][0-9]*(\.[0-9]+)?,\s*-?[1-9][0-9]*(\.[0-9]+)?
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
}

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

  • *
    前面的匹配项的任意数量(包括无)
  • +
    前面的一个或多个匹配项
  • 与前面的内容零或一个匹配
  • []
    一系列字符
  • \.
    一个点(如果反斜杠在Java
    字符串中,则需要转义)
  • \s
    任何空白(此反斜杠也需要在
    字符串中转义)
把这些放在一起,你可能会得到这样一个正则表达式

-?[1-9][0-9]*(\.[0-9]+)?,\s*-?[1-9][0-9]*(\.[0-9]+)?
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
}
匹配一对经纬度

这和

  • 可选的减号
  • 第一位数字为0以外的数字
  • 任意数量的其他数字(偶数无)
  • (可选)由一个小数点组成的序列,然后是任意数量的其他数字
  • 逗号
  • 任意数量的空白字符(偶数无)
  • 这一段的前四个要点,全部重述一遍
然后可以编写这样的代码

-?[1-9][0-9]*(\.[0-9]+)?,\s*-?[1-9][0-9]*(\.[0-9]+)?
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
}


不是你要求的,而是你想要
|
(意思是“或”)而不是
两种
if
条件。你不需要
否则继续
。使用
JFormattedTextField
来限制输入类型(仅限十进制值),您仍然需要验证ranges@MadProgrammer听起来像是个答案。@mad程序员,谢谢,虽然我仍然需要检查所有内容是否按正确的顺序。@JaneLilep我将为
纬度
经度
设置一个单独的字段,
JFormattedText
字段所做的是确保用户只输入数字数据,而不是您要求的数据,而是您想要的
|
(意思是“或”)而不是在这两种
if
条件下使用
。你不需要
否则继续
。使用
JFormattedTextField
来限制输入类型(仅限十进制值),您仍然需要验证ranges@MadProgrammer听起来像是个答案。@mad程序员,谢谢,虽然我仍然需要检查所有内容是否按正确的顺序排列。@JaneLilep我将为
纬度
经度
设置一个单独的字段,
JFormattedText
字段所做的是确保用户只输入数字数据。非常感谢,但是这个正则表达式使用以下输入“4390321”当它不应该的时候。同样,它也适用于这个“13.90,12.91”,但不适用于这个“13.90,12.91”(逗号后的空格)。因此,您可能需要一些调整。我想
4390231
会在你的射程检查中被发现,因为90231不在-180和180之间。正则表达式只检查是否有两个用逗号分隔的数字。如果你想要一个空格,那么你可以在正则表达式中的正确位置放置一个空格和一个空格。我误读了你的问题,你说“逗号后没有空格”。再次,非常感谢!我必须学习正则表达式,因为我从未使用过它们。我可以再问你一件事吗?我不知道我是否应该问一个新问题。。。无论如何,这个正则表达式
([+-]?\d+\.?\d+\s*,\s*([+-]?\d+\.?\d+)
和你的有什么区别?例如,您接受输入“3,3”,但另一个不接受;但我认为关键的一点是,表达式中的数字部分有
\d+\?\d+
。现在
\d
只是
[0-9]
的简写;但是
+
表示“一个或多个”。这是一个或多个数字,然后是一个点,然后是一个或多个数字。所以即使没有点,也必须至少有两个数字来匹配这个正则表达式。这就是为什么在您的示例中,
3
与它不匹配的原因。非常感谢,但是这个正则表达式在不应该与以下输入“4390321”一起工作。它也适用于这个“13.90,12.91”,但确实如此