如何从文件中读取此内容并单独获取每个值

时间:2017-11-13 13:09:16

标签: java

我有这个文本文件,我需要将它提取到Java程序来确定数组大小及其值我可以单独读取每一行但我无法获得包含许多数字的行的值。另外,如何计算第三行中的元素。(0 2)

4
5
0 2

0 1 0.6
0 2 0.2
0 3 0.5
1 3 0.8
2 3 0.3

我正在使用的这段代码:

 List<Integer> list = new ArrayList<Integer>();
        File file = new File("D:\\ALGORTHIMS\\MASTER LEVEL\\dr. khaled\\assignment 1\\text.txt");
        BufferedReader reader = null;
         List<Double> ints = new ArrayList<Double>();

        try {
            reader = new BufferedReader(new FileReader(file));
            String text = null;

            while ((text = reader.readLine()) != null) {
                if (text.length() == 1) {
                    list.add(Integer.parseInt(text));
                } else {


                    String[] strs = text.trim().split("\\s+");


                    for (int i = 0; i < strs.length; i++) {
                        ints.add(Double.parseDouble(strs[i]));
                    }
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (reader != null) {
                    reader.close();
                }
            } catch (IOException e) {

            }
        }

//print out the list
        System.out.println(list);

        System.out.println(ints);

4 个答案:

答案 0 :(得分:0)

看起来您正在使用与int混合的双打,因此Integer.parseInt()无效。

您可以做的是split该行,由空格分隔为array,并将每个元素放入list。请注意,这会将0打印为0.0

while ((text = reader.readLine()) != null) {
      String[] numbers = text.split(" ");
      for (String number : numbers) {
           list.add(Double.valueOf(number));
      }
}

另外,您是否只为代码复制了this个答案?

答案 1 :(得分:0)

尝试类似

的内容
public static void main(String[] args) {
        List<Double> list = new ArrayList<>();
        File file = new File("text.txt");
        BufferedReader reader = null;

        try {
            reader = new BufferedReader(new FileReader(file));
            String text = null;

            while ((text = reader.readLine()) != null) {
                String[] str = text.split(" ");
                for (int i = 0; i<str.length; i++) {
                    if(str[i].trim().length() > 0) {
                        list.add(Double.parseDouble(str[i]));
                    }
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (reader != null) {
                    reader.close();
                }
            } catch (IOException e) {
                System.out.print(e);
            }
        }

//print out the list
        System.out.println(list);
    }

答案 2 :(得分:0)

我认为使用Scanner是最佳解决方案。 例如。如果我们有文件

4 5

 0  1  2  3.1
 4  5  6  7.2
 8  9 10 11.3
12 13 14 15.4
16 17 18 19.5

我们定义一个包含4行和5列的数组。然后在int[][] arr中获取它我们可以使用以下方法:

public static void main(String... args) throws FileNotFoundException {
    double[][] arr = null;

    try (Scanner scan = new Scanner(new FileInputStream(new File("text.txt")))) {
        scan.useLocale(Locale.US);  // to use '.' as separator
        int rows = scan.nextInt();
        int columns = scan.nextInt();
        scan.nextLine();

        arr = new double[rows][columns];

        for (int i = 0; i < rows; i++)
            for (int j = 0; j < columns; j++)
                arr[i][j] = scan.nextDouble();
    }

    System.out.println(Arrays.toString(arr));
}

答案 3 :(得分:0)

您可以使用java.util.scanner相对轻松地从流中解析各种数据类型。

例如,假设您要解析以下内容:

1 2 3.0
4.0 5 6

您可以使用以下代码段:

Scanner scan = new Scanner(System.in);
int one = scan.nextInt();
int two = scan.nextInt();
double three = scan.nextDouble();
// Defaultly, it will continue past the line break
double four = scan.nextDouble();

// We can also do this
double five = scan.nextDouble();
long six = scan.nextLong();

一个重要的注意事项是,java.util.Scanner会取消IOException(但转换文字的例外情况,例如NumberFormatException仍会被提出)。您可以查看ioException以查看是否有人被抑制。