我有一个这样的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()。
答案 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));
}
}
}