【问题标题】:How to change data(string) from a txt file so I can do mathematical operations on that data?如何从 txt 文件更改数据(字符串),以便我可以对该数据进行数学运算?
【发布时间】:2020-04-22 10:14:43
【问题描述】:

对于我的问题,我看到一个提醒,很多人已经问过这个问题,但我似乎找不到合适的答案。或者答案是其他对我没有帮助的编程语言。所以我会再问一次:)

我必须从一个 txt 文件中读取,然后对数据进行一些数学运算。该数据有 10000 行,每行有 20 个数字,用分号分隔。 为了从 txt 文件中读取,我使用了 BufferedReader,它给了我字符串。我可能必须将此字符串更改为 int。到目前为止,一切都很好。然后我必须把它做成一个数组......怎么样?数组需要二维还是一维就够了?

最后我必须将结果写入不同的txt文件。我必须写入可被 3、11 和 5 整除的不同文件编号,然后我必须对 txt 文件中的每一行求和并得出整个 txt 数字的总和。 我写到现在还好吗?我应该删除一些东西还是?

class Assignment {

    public static void main (String[] args) {

        String nameFile = "numbers.txt";
        String contentFile = readFromFile(nameFile);
        List<Integer> divideNumber = stringToIntList(contentFile);

        List<Integer> divisibleNo = processedData(divideNumber);

        System.out.println(divideNumber);
    }

    private static String readFromFile(String nameFile) {
        String content = "";
        try {
            File file = new File(nameFile);
            BufferedReader read = new BufferedReader(new FileReader(file));

            String line = read.readLine();
            while(line != null) {
                System.out.println(line);
                line = read.readLine();
                content = line;
            }
            read.close();
        } catch (IOException e) {
            System.out.println("There was an error reading from the file");
        }
        return content;
    }

    private static List<Integer> stringToIntList(String contentFile) {
        return Arrays
            .stream(contentFile.split("; "))
            .map(Integer::parseInt)
            .collect(Collectors.toList());
    }

    private static int processedData(int divideNumber) {
        try {
            for(int i = 0; i < divideNumber; i++) {
                if((divideNumber % 3 == 0) || (divideNumber % 5 == 0) || (divideNumber % 11 == 0)) {
                System.out.println(divideNumber);
                }
            }
        }
        catch(NumberFormatException e){
            System.out.println("It is not a number"); 
        }
        return divideNumber;
    }
}

【问题讨论】:

    标签: java arrays file bufferedreader


    【解决方案1】:

    使用带有适当分隔符的扫描器:

    List<Integer> list = new ArrayList<>();
    Scanner scanner = new Scanner(new FileInputStream(nameFile))
       .useDelimiter("\\D+");
    while (scanner.hasNext()) {
        int i = scanner.nextInt();
        list.add(i);
    }
    

    【讨论】:

    • 我得问问。为什么不使用 BufferedReader? .useDelimiter("\\D+") 是什么意思?还有,以后想操作的时候,可以用这个“列表”吗?
    • @Escape BufferedReader 中没有将字符串转换为整数的内容。您可以自己执行此操作,尽管您似乎不知道如何操作。 Scanner 封装了它。您可以随时为自己查找useDelimiter()。它已记录在案。
    • @user207421 我认为我可以解析使用 BufferedReader 读取的数据,还是我错了?但是我不知道以后如何对这些数据进行操作。
    • @Escape 我怎么知道你能做什么和不能做什么?在您的问题中没有证据表明您知道如何将字符串转换为整数,并且您评论的最后一部分只是含糊不清。
    • 我想我会使用扫描仪。但我想用 BufferedReader 来学习它。 @user207421 cmets 和聊天在这里澄清问题或未来对话中遗漏或误解的内容并互相帮助,而不是指手画脚:) 我只是想学习并获得一些帮助。我看你有很多知识。你能帮我完成这个任务吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 2014-03-08
    • 1970-01-01
    • 2013-11-30
    相关资源
    最近更新 更多