Java 有没有一种方法可以使用扫描仪对象来搜索文本文档中的特定数据?
我正在制作一个从格式化文本文档中读取数据的程序: 行星数据 行星直径(km)质量(kg)g(m/s^2)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 在文本文件中,它更漂亮一些,但基本上它是
- 水银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
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的学生,所以我真的不知道列表或尝试或捕获等。我有一个带有行星名称的数组,以便以后可以关联它,但我不需要从作业的文本文件中获取它。谢谢你!