使用扫描循环在java中的列表中查找特定值:返回数字格式异常

问题描述 投票:0回答:1

我正在尝试在文本文件中查找特定字符串。 这是我使用 [Java]

List
s:

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class constantb {
    static String filePath = "C:myiflepath";

    public static Double findDouble(String name) throws IOException{
        String value;
        Scanner constScanner = new Scanner(filePath);
        List<String> list=new ArrayList<>();
        while(constScanner.hasNextLine()){
            list.add(constScanner.nextLine()); 
        }
        value = list.get(list.indexOf(name)+1);
        System.out.println(value);
        constScanner.close();
        return Double.parseDouble(value);
    }
}

当我运行这个时,我遇到了

NumberFormatException
问题。 在文本文件中,它搜索一个名称,文件中该名称的正下方是我想要以双精度形式返回的内容。 这是文本文件:

help please:
double hi
9

我尝试删除文件的列表部分:

import java.util.Scanner;

public class constantc{

    static String filePath = "C:myfilepath";

    public static Double findDouble(String name){
        Scanner scanner = new Scanner(filePath);
        String value = scanner.nextLine();
        while(scanner.hasNextLine()){
            value = scanner.nextLine();
            if(name == scanner.nextLine()){
                scanner.nextLine();
                value = scanner.nextLine();
                break;
            }else{
                scanner.nextLine();
            }
        }
        scanner.close();
        return Double.parseDouble(value);
    }
}

这不起作用,因为我遇到了同样的错误。

java null numberformatexception
1个回答
0
投票

您不是在扫描文件,而是在扫描字符串“C:myiflepath”。 您需要创建一个文件句柄并扫描它。 按如下方式更改您的第一个代码示例:

导入java.io.IOException; 导入java.util.ArrayList; 导入java.util.List; 导入 java.util.Scanner;

公共类常量b { 静态字符串文件路径 = "C:myiflepath";

public static Double findDouble(String name) throws IOException{
    String value;
    File file = new File(filePath); // added 
    Scanner constScanner = new Scanner(file); // changed
    List<String> list=new ArrayList<>();
    while(constScanner.hasNextLine()){
        list.add(constScanner.nextLine()); 
    }
    value = list.get(list.indexOf(name)+1);
    System.out.println(value);
    constScanner.close();
    return Double.parseDouble(value);
}

}

© www.soinside.com 2019 - 2024. All rights reserved.