Java 从列表字符串存储到另一个数组列表
我有这样一个txt文件,其中包含经度和纬度坐标:Java 从列表字符串存储到另一个数组列表,java,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)); 我想将txt文件中的所有值存储到列表中 因此,我需要一个函数来加载文件: public sta
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));
我想将txt文件中的所有值存储到列表中
因此,我需要一个函数来加载文件:
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;
}
公共静态列表加载数据(字符串文件名)引发IOException{
列表行=Files.readAllLines(path.get(fileName));
列表点=新的ArrayList();
//对于(int i=0;i
正如我所说,现在我只是在阅读每一行,例如行[0]=12022
我想将线[0]经度存储到点[0].setLon(),将线[0]纬度存储到点[0].setLat()。看一下类扫描程序;Scanner有很多有用的工具来读取和解析字符串。看看类Scanner;Scanner有很多有用的工具来读取和解析字符串
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())));
}
这应该能满足您的需要。仅当文件中只有数字时才有效。如果你需要进一步的帮助,你可以回去报到
这应该能满足您的需要。仅当文件中只有数字时才有效。如果你需要进一步的帮助,你可以回去报到
我想将线[0]经度存储到点[0].setLon(),将线[0]纬度存储到点[0].setLat()
你现在不需要二传手。您已经有了一个很好的构造函数来接收它们
只需在将like分成两部分后创建一个对象
for (int i = 0; i < lines.size(); i++) {
String[] latlang = lines.get(i).split("\\s+");
GisPoints g = new GisPoints(Double.parseDouble(latlang[0].trim()),Double.parseDouble(latlang[1].trim()));
points.add(g)
}
for(inti=0;i
我想将线[0]经度存储到点[0].setLon(),将线[0]纬度存储到点[0].setLat()
你现在不需要二传手。您已经有了一个很好的构造函数来接收它们
只需在将like分成两部分后创建一个对象
for (int i = 0; i < lines.size(); i++) {
String[] latlang = lines.get(i).split("\\s+");
GisPoints g = new GisPoints(Double.parseDouble(latlang[0].trim()),Double.parseDouble(latlang[1].trim()));
points.add(g)
}
for(inti=0;i
我认为拆分
可以解决您的问题:
String arr[] = lines[i].split("\\s+");
GisPoints p = new GisPoints(Double.parseDouble(arr[0]), Double.parseDouble(arr[1]));
我认为split
可以解决您的问题:
String arr[] = lines[i].split("\\s+");
GisPoints p = new GisPoints(Double.parseDouble(arr[0]), Double.parseDouble(arr[1]));
您可能希望使用java8流执行此操作:
List<GisPoint> points = lines.stream()
.map(s -> s.split("\\s+"))
.map(array -> Arrays.stream(array)
.map(String::trim)
.filter(s -> !s.isEmpty())
.mapToDouble(Double::parseDouble)
.toArray()
)
.map(array -> new GisPoint(array[0], array[1]))
.collect(Collectors.toList());
List points=lines.stream()
.map(s->s.split(\\s+))
.map(数组->数组.stream(数组)
.map(字符串::trim)
.filter(s->!s.isEmpty())
.mapToDouble(Double::parseDouble)
.toArray()
)
.map(数组->新建GisPoint(数组[0],数组[1]))
.collect(Collectors.toList());
您可能希望使用java8流执行此操作:
List<GisPoint> points = lines.stream()
.map(s -> s.split("\\s+"))
.map(array -> Arrays.stream(array)
.map(String::trim)
.filter(s -> !s.isEmpty())
.mapToDouble(Double::parseDouble)
.toArray()
)
.map(array -> new GisPoint(array[0], array[1]))
.collect(Collectors.toList());
List points=lines.stream()
.map(s->s.split(\\s+))
.map(数组->数组.stream(数组)
.map(字符串::trim)
.filter(s->!s.isEmpty())
.mapToDouble(Double::parseDouble)
.toArray()
)
.map(数组->新建GisPoint(数组[0],数组[1]))
.collect(Collectors.toList());
看看正则表达式:
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));
}
}
}
看看正则表达式:
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));
}
}
}
它看起来是这样的:
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));
}
for(int i=0;i
它看起来像这样:
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));
}
for(int i=0;i
这是一个使用String.split()的简单解决方案
可以从loadData()方法调用此方法。
我希望这个解决方案是有帮助的。祝你好运 这是一个使用String.split()的简单解决方案
可以从loadData()方法调用此方法。
我希望这个解决方案是有帮助的。祝你好运 您已经尝试了什么?因为您的文件只包含int,所以可以在Scanner中使用nextInt方法class@AhmadAlsanie:它将不仅包含ints@AhmadAlsanie为什么OP需要扫描仪,因为他已经读取了文件并得到了行?我不明白你的意思。你已经试过什么了?因为你的文件只包含int,所以你可以在Scanner中使用nextInt方法class@AhmadAlsanie:它将不仅包含ints@AhmadAlsanie为什么OP需要扫描仪,因为他已经读取了文件并得到了行?我不明白你的意思。这是一个很好的建议,但不是一个完整的答案。这将是一个最好的评论(当然,如果你打算改进它,我想这没关系),你可以添加一些有用的代码片段到OP…否则它应该是一个评论我必须有50个声誉评论的问题,我没有。这是一项任务,我认为他或她可以自己解决,因此我没有详细说明,只是为他或她指出了正确的方向。请放心,如果我有50个代表,这将只是一个评论:-)这是一个很好的建议,但不是一个完整的答案。这将是一个最好的评论(当然,如果你打算改进它,我想这没关系),你可以添加一些有用的代码片段到OP…否则它应该是一个评论我必须有50个声誉评论的问题,我没有。这是一项任务,我认为他或她可以自己解决,因此我没有详细说明,只是为他或她指出了正确的方向。请放心,如果我有50个代表,这将只是一个评论:-)arr[0]
is String。不是双精度。arr[0]
是字符串。不是双重的。我想你忘了分开:)@SomeJ