我有以下问题:我必须要求用户引入一个字符串。该字符串将是一个地名(例如,西班牙)或该地点的坐标(例如:4.268482, 6.162849
)。
如何检查它是坐标还是名称?我尝试为迭代创建一个for子句,直到找到逗号(,),而且地名也可以包含逗号(例如Barcelona, Spain
)。
如何有效解决此问题?
由于OP没有响应,因此我假设地点名称允许包含所有字符,包括空格和非ASCII字符,例如日文汉字等。因此,一切都是地名。
由于所有内容都是地名,因此应该首先检查传递的String
是否为两个浮点数,并用逗号和空格分隔。为此,可以使用以下正则表达式:
^-?(?:[1-9]\d*|0)(?:.\d*[0-9])?, -?(?:[1-9]\d*|0)(?:.\d*[0-9])?$
注意,此正则表达式不检查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();
}
}
我建议使用正则表达式来标识只有数字的单词。
/*
* 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");
}
}
}
}
我建议使用\ 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