从列表字符串存储到另一个数组列表

时间:2017-07-26 09:02:36

标签: java

我有一个这样的txt文件,其中包含经度和纬度坐标:

120.12    22.233
100    23.12
98     19.12

如果我想阅读文件,我正在做:

List<String> lines = Files.readAllLines(Paths.get(fileName));
System.out.println("LINE: " + lines.get(0));

它给了我:120 22

我有一个读经度和纬度的课程:

public class GisPoints {

    private double lat;
    private double lon;

    public GisPoints() {
    }

    public GisPoints(double lat, double lon) {
       super();
       this.lat = lat;
       this.lon = lon;
    }

    //Getters and Setters
}

我想将txt文件中的所有值存储到List<GisPoints>

所以,我想要一个函数来加载文件:

public static List<GisPoints> loadData(String fileName) throws IOException {

      List<String> lines = Files.readAllLines(Paths.get(fileName));

      List<GisPoints> points = new ArrayList<GisPoints>();

      //for (int i = 0; i < lines.size(); i++) {

     // }

      return points;

  }

正如我所说,现在我只是阅读每一行,例如lines[0] = 120 22

我想将经度[0]存储到点[0] .setLon(),将[0]纬度存储到点[0] .setLat()。

8 个答案:

答案 0 :(得分:3)

使用String.split()

这是一个简单的解决方案
private GisPoints createGisPointsObjectFromLine(String p_line)
{
    String[] split = p_line.trim().split(" ");
    double lat = Double.parseDouble(split[0]);
    double lon = Double.parseDouble(split[split.length - 1]);
    return GisPoints(lat, lon);
}

您可以从loadData()方法调用此方法。 我希望这个解决方案很有帮助。祝你好运!

答案 1 :(得分:1)

for (String str : lines) {
    String[] helpArray = str.split("\\s+"); // or whatever is betweeen
                                            // the two numbers
    points.add(new GisPoints(Double.valueOf(helpArray[0].trim()), Double.valueOf(helpArray[1].trim())));
}

这应该在您需要时起作用。只有在文件中只有数字时才有效。如果您需要进一步的帮助,可以报告

答案 2 :(得分:1)

  

我想将经度[0]存储到点[0] .setLon(),将[0]纬度存储到点[0] .setLat()。

您不需要马上安装。你有一个很好的构造函数来接收它们。

将分割后的对象分成两部分。

$sender->bundle

答案 3 :(得分:1)

我认为split可以解决您的问题:

String arr[] = lines[i].split("\\s+");
GisPoints p = new GisPoints(Double.parseDouble(arr[0]), Double.parseDouble(arr[1]));

答案 4 :(得分:1)

您可能希望使用java8-streams:

:abbreviate

答案 5 :(得分:1)

看起来像这样:

    for (int i = 0; i < lines.size(); i++)
    {
        String line = lines.get(i);

        String[] values = line.split("\\s+");

        double lat = Double.parseDouble(values[0]);
        double lon = Double.parseDouble(values[1]);

        points.add(new GisPoints(lat, lon));
    }

答案 6 :(得分:0)

看一下Scanner课程; Scanner有许多用于读取和解析字符串的有用工具。

答案 7 :(得分:0)

看看正则表达式:

import java.util.regex.*;

public class HelloWorld{

     public static void main(String []args){
        String line = "98 19";
        Pattern pattern = Pattern.compile("^(\\d+)\\s*(\\d+)$");
        Matcher matcher = pattern.matcher(line);
        while (matcher.find()) {
            System.out.println("group 1: " + matcher.group(1));
            System.out.println("group 2: " + matcher.group(2));
        }
     }
}