java - 如何检查输入是否有坐标或地名?
问题描述
我有以下问题:我必须要求用户介绍一个字符串。这个字符串是一个地名(例如,西班牙)还是该地的坐标(例如:)4.268482, 6.162849
。
如何检查它是坐标还是名称?我尝试创建一个 for 子句,该子句迭代直到找到逗号 (,),但地名也可以包含逗号(例如,Barcelona, Spain
)。
我怎样才能有效地解决这个问题?
解决方案
由于 OP 没有响应,我假设地名允许包含所有字符,包括空格和非 ascii 字符,如 Kanjis 等。因此,一切都是地名。
由于一切都是地名,因此应首先检查String
传递的是否是两个浮点数,以逗号和空格分隔。为此,可以使用以下正则表达式:
^-?(?:[1-9]\d*|0)(?:.\d*[0-9])?, -?(?:[1-9]\d*|0)(?:.\d*[0-9])?$
请注意,此正则表达式不检查 GPS 坐标的合法范围。
如果给定的String
不匹配这个正则表达式,它将是一个地名。
示例程序可能如下所示:
import java.util.regex.Pattern;
class Ideone {
public static final Pattern PATTERN = Pattern.compile("^-?(?:[1-9]\\d*|0)" +
"(?:.\\d*[0-9])?, -?(?:[1-9]\\d*|0)(?:.\\d*[0-9])?$");
public static void main(final String[] args) {
System.out.println(isGpsCoordinate("0.0, 0.0"));
System.out.println(isGpsCoordinate("New York"));
System.out.println(isGpsCoordinate("東京"));
}
private static boolean isGpsCoordinate(final String input) {
return PATTERN.matcher(input).matches();
}
}
推荐阅读
- javascript - 如果 php 会话具有特殊值,则将只读属性添加到元素
- javascript - 为什么 WebAssembly 比 JavaScript 慢?
- node.js - Angular6 从服务器对本地主机进行 API 调用
- java - 键和值的休眠计数
- java - 使用 Java 类定义 Oracle 对象类型的构造函数问题
- nix - 如何在 Nixos 中安装最新/不稳定的 Haskell 包可执行文件?
- apache-kafka - 卡夫卡和 IIDR CDC
- mongodb - dbpath中mongodb服务器数据文件和db中数据文件夹的区别
- ansible - 如何使用 ansible playbook 在目标服务器中启动服务
- python - 您如何在 Python 乌龟的每次迭代中增加 pensize?