Java 有没有一种方法可以使用扫描仪对象来搜索文本文档中的特定数据?

Java 有没有一种方法可以使用扫描仪对象来搜索文本文档中的特定数据?,java,arrays,java.util.scanner,Java,Arrays,Java.util.scanner,我正在制作一个从格式化文本文档中读取数据的程序: 行星数据 行星直径(km)质量(kg)g(m/s^2) 水银4880 3.30E+23 3.70 金星12104 4.87E+24 8.87 接地127565.97E+249.79 火星6794 6.24E+23 3.61 木星142984 1.90E+2724.80 土星1205365.68E+2610.43 天王星51118 8.68E+25 8.86 海王星49352 1.02E+2611.17 在文本文件中,它更漂亮一些,但基本上它是

我正在制作一个从格式化文本文档中读取数据的程序:

行星数据

行星直径(km)质量(kg)g(m/s^2)

  • 水银4880 3.30E+23 3.70
  • 金星12104 4.87E+24 8.87
  • 接地127565.97E+249.79
  • 火星6794 6.24E+23 3.61
  • 木星142984 1.90E+2724.80
  • 土星1205365.68E+2610.43
  • 天王星51118 8.68E+25 8.86
  • 海王星49352 1.02E+2611.17
在文本文件中,它更漂亮一些,但基本上它是一个四列文档,每列包含一个数字。我正在使用scanner类尝试只读取最后一列数字,但在不使用大量nextLine()调用的情况下,找不到一种简单的方法。有没有更好的方法来搜索这些双精度,并用扫描仪将它们拉入阵列

这段代码将被编译,但我一运行它就会收到一个不匹配的错误

public static double [] getGravity()throws IOException{
    Scanner inFile = new Scanner(new File("PlanetaryData.txt"));
    double [] getGrav = new double[8];
    for(int i = 0; i < 8; i++){
        getGrav[i] = inFile.nextDouble();
        getGrav[i] /= 10;
        System.out.println(getGrav[i]);
    }
    return getGrav;
}
publicstaticdouble[]getGravity()抛出IOException{
扫描仪填充=新扫描仪(新文件(“PlanetaryData.txt”);
double[]getGrav=新的double[8];
对于(int i=0;i<8;i++){
getGrav[i]=infle.nextDouble();
getGrav[i]/=10;
System.out.println(getGrav[i]);
}
返回getGrav;
}

假设您的文本文件结构如下:

Mercury 4880 3.30E+23 3.70
Venus 12104 4.87E+24 8.87
Earth 12756 5.97E+24 9.79
Mars 6794 6.24E+23 3.61
Jupiter 142984 1.90E+27 24.80
Saturn 120536 5.68E+26 10.43
Uranus 51118 8.68E+25 8.86
Neptune 49352 1.02E+26 11.17
你可以试试这个:

public static double [] getGravity()throws IOException{
    Scanner inFile = new Scanner(new File("PlanetaryData.txt"));
    double [] getGrav = new double[8];
    for(int i = 0; i < 8; i++){
        getGrav[i] = inFile.nextLine().split("\\s+")[3];
        System.out.println(getGrav[i]);
    }
    return getGrav;
}
publicstaticdouble[]getGravity()抛出IOException{
扫描仪填充=新扫描仪(新文件(“PlanetaryData.txt”);
double[]getGrav=新的double[8];
对于(int i=0;i<8;i++){
getGrav[i]=infle.nextLine().split(“\\s+”)[3];
System.out.println(getGrav[i]);
}
返回getGrav;
}

一种可能是使用一个双精度列表来存储读取的graivty值,例如

List<Double> al = new ArrayList<>();
Scanner scanner = null;
try {
  scanner = new Scanner(new File("file.txt"));
  while (scanner.hasNextLine()) {
    String str = scanner.nextLine();
    if (str == null) {
      continue;
    }
    double gravity = Double.parseDouble(
        str.substring(1 + str.lastIndexOf(' ')).trim());
    al.add(gravity);
  }
} catch (Exception e) {
  e.printStackTrace();
} finally {
  if (scanner != null) {
    scanner.close();
  }
}
System.out.println(al);
List al=new ArrayList();
扫描器=空;
试一试{
扫描仪=新扫描仪(新文件(“File.txt”);
while(scanner.hasNextLine()){
String str=scanner.nextLine();
如果(str==null){
继续;
}
双重重力=double.parseDouble(
str.substring(1+str.lastIndexOf(“”)).trim();
al.添加(重力);
}
}捕获(例外e){
e、 printStackTrace();
}最后{
如果(扫描器!=null){
scanner.close();
}
}
系统输出打印项次(al);
然而,行星名称和价值之间并没有直接的联系。另一个选项是使用
地图
关联行星名称和值,如

Map<String, Double> map = new HashMap<>();
Scanner scanner = null;
try {
  scanner = new Scanner(new File("file.txt"));
  while (scanner.hasNextLine()) {
    String str = scanner.nextLine();
    if (str == null) {
      continue;
    }
    String planet = str.substring(0, str.indexOf(' '));
    double gravity = Double.parseDouble(
        str.substring(1 + str.lastIndexOf(' ')).trim());
    map.put(planet, gravity);
  }
} catch (Exception e) {
  e.printStackTrace();
} finally {
  if (scanner != null) {
    scanner.close();
  }
}
System.out.println(map);
Map Map=newhashmap();
扫描器=空;
试一试{
扫描仪=新扫描仪(新文件(“File.txt”);
while(scanner.hasNextLine()){
String str=scanner.nextLine();
如果(str==null){
继续;
}
字符串planet=str.substring(0,str.indexOf(“”));
双重重力=double.parseDouble(
str.substring(1+str.lastIndexOf(“”)).trim();
地图。放置(行星,重力);
}
}捕获(例外e){
e、 printStackTrace();
}最后{
如果(扫描器!=null){
scanner.close();
}
}
系统输出打印项次(map);

实际文件中的每一列之间有多一点空白,但基本上是相同的。然后可以使用
split(\\s+”)
meh。我想说我可以用它,但我是一名刚开始学习AP Comp Sci的学生,所以我真的不知道列表或尝试或捕获等。我有一个带有行星名称的数组,以便以后可以关联它,但我不需要从作业的文本文件中获取它。谢谢你!