如何检查输入内容是否包含坐标或地点名称? [关闭]

问题描述 投票:-3回答:3

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

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

如何有效解决此问题?

java string int
3个回答
0
投票

由于OP没有响应,因此我假设地点名称允许包含所有字符,包括空格和非ASCII字符,例如日文汉字等。因此,一切都是地名。

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

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

regex101 demo

注意,此正则表达式不检查f或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


-2
投票

我建议使用正则表达式来标识只有数字的单词。

  /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication2;

import java.util.Scanner;
import java.util.regex.Pattern;

public class as {

    static Scanner in = new Scanner(System.in);

    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("-?\\d+(\\.\\d+)?");
        String word = "4.268482, 6.162849";
        String[] it = word.split(",");
        for (String it1 : it) {
            if (pattern.matcher(it1).matches()) {
                System.out.println("Numerico");
            } else {
                System.out.println("Texto");
            }
        }

    }

}

-2
投票

我建议使用\ d为数字的正则表达式。如果要检查坐标,请使用例如:

String coordinate = "4.268482,6.162849";
String regex = "\\d+\\.\\d+,\\d+\\.\\d+";
System.out.println(coordinate.matches(regex)); // Should return true

如果逗号后可以有空格,则使用

String regex = "\\d+\\.\\d+,\\s*\\d+\\.\\d+";

有关更多信息,请访问:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

© www.soinside.com 2019 - 2024. All rights reserved.