我正在为类LatLong
编写一个构造函数,它应该采用"3430E 5256N"
等字符串表示形式,并将其转换为两个双数,纬度和经度。
我该怎么做?
到目前为止我写了这个,但是在拆分时不知道如何删除E和N:
public LatLong(String latlong) {
String[] parts = latlong.split(" ");
String latitude = parts[0];
String longitude = parts[1];
}
此外,如果用户输入34.5,它将需要34并乘以0.5*60
以获得30
的分钟,这看起来像3430
,并且取决于数字,它应该确定它的基数 - 北,南,东或西。
答案 0 :(得分:1)
String latitude = parts[0].substring(0,4);
String longitude = parts[1].substring(0,4);
答案 1 :(得分:0)
您只需使用Scanner
从输入字符串中检索double值。
Double lat, long;
Scanner scanner = new Scanner(latlong);
scanner.useDelimiter("[^\\d,]");
while (scanner.hasNextDouble() || scanner.hasNext()) {
if (scanner.hasNextDouble()) {
if (lat == null) {
lat = scanner.nextDouble(); // First setting the latitude
} else {
long = scanner.nextDouble(); // Then longitude and stopping
break;
}
} else {
scanner.next();
}
}
scanner.close(); // Edit: forgot the close in original answer
任何其他转换(正如您提到的34.5作为输入)可以在您拥有双打之后轻松完成。
请注意, E 和 N 字母是纬度和经度定义的一部分。无论你的问题如何,我相信你最终也应该保存它们。
答案 2 :(得分:0)
您可以执行此操作以删除字符串的任何最后一个字母,请使用:
String latitude = parts[0].substring(0,parts[0].length()-1);
String longitude = parts[1].substring(0,parts[1].length()-1);
答案 3 :(得分:0)
String coordinates = "3430E 5256N";
String[] split = coordinates.split(" ");
String latitude = split[0];
String longitude = split[1];
int indexOfPoint = latitude.indexOf(".");
if (indexOfPoint != -1) {
//we don't have point in string representations, so just remove the letter
latitude = latitude.replace("E", "");
latitude = latitude.replace("W", "");
} else {
//the string representation contains a point
String valueAfterPoint = latitude.substring(indexOfPoint);
valueAfterPoint = valueAfterPoint.replace("E", "");
valueAfterPoint = valueAfterPoint.replace("W", "");
double minutes = Double.parseDouble(valueAfterPoint);
minutes*=60;
latitude+=minutes;
}
//the samething with longitude, just remove letters N and S in replace statements.