首页 > 解决方案 > 如何检查输入是否有坐标或地名?

问题描述

我有以下问题:我必须要求用户介绍一个字符串。这个字符串是一个地名(例如,西班牙)还是该地的坐标(例如:)4.268482, 6.162849

如何检查它是坐标还是名称?我尝试创建一个 for 子句,该子句迭代直到找到逗号 (,),但地名也可以包含逗号(例如,Barcelona, Spain)。

我怎样才能有效地解决这个问题?

标签: javastringint

解决方案


由于 OP 没有响应,我假设地名允许包含所有字符,包括空格和非 ascii 字符,如 Kanjis 等。因此,一切都是地名。

由于一切都是地名,因此应首先检查String传递的是否是两个浮点数,以逗号和空格分隔。为此,可以使用以下正则表达式:

^-?(?:[1-9]\d*|0)(?:.\d*[0-9])?, -?(?:[1-9]\d*|0)(?:.\d*[0-9])?$

regex101 demo

请注意,此正则表达式不检查 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();
    }
}

Ideone demo


推荐阅读