我如何从一个缓冲的阅读器文件中获取一个数字?

时间:2019-04-30 10:24:47

标签: java ascii bufferedreader

我需要使用BufferedReader从textFile中获取一个数字。 当我得到它时,数字以ASCII编码,并且我无法将其转换为整数。

该练习是针对课堂练习的。练习:在Windows笔记本的文件夹中创建一个文本文件。 该文件将包含整数,每行一个。创建一个程序 在Java中,它读取先前的数据文件并在屏幕上显示给我们, 值,最大值和最小值。用户将指出姓名 文件。

char valor;
fs = new FileReader(path+filename);
bf = new BufferedReader(fs)

//THE TEXTFILE CONTAINS INT NUMBERS, FIRST OF THEM IS NUMER 3
valor = (char)bf.read(); //I NEED THIS NUMBER, WITHOUT ASCII CODED

//I NEED TO USE THIS VALUE FOR CALCULATE
 System.out.print(valor); //CONSOLE :      3

---------------------------------------------
//IF I CONVERT, CONSOLE SHOWS
System.out.print((int)valor);   //CONSOLE:     51

2 个答案:

答案 0 :(得分:1)

之所以会这样,是因为ASCII表中字符“ 3”的索引为51(ASCII table)。您需要解析它:

int value = Character.getNumericValue(valor);

或减去ASCII码'0'(48)

int value = valor - '0';

答案 1 :(得分:0)

一种方法是使用Integer类中的构造函数,该构造函数可以接受字符串输入:

int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
int sum = 0;
int cnt = 0;

try (BufferedReader br = Files.newBufferedReader(Paths.get(path+filename))) {
    String line;
    while ((line = br.readLine()) != null) {
        Integer val = new Integer(line);
        if (val < min) min = val;
        if (val > max) max = val;
        sum += val;
        ++cnt;
    }
}
catch (IOException e) {
    System.err.format("IOException: %s%n", e);
}

System.out.println("average value: " + (sum / cnt));
System.out.println("highest value: " + max);
System.out.println("smallest value: " + min);