Java字符串拆分纬度和经度问题

时间:2015-11-08 18:50:15

标签: java split

我正在为类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,并且取决于数字,它应该确定它的基数 - 北,南,东或西。

4 个答案:

答案 0 :(得分:1)

使用substring

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.