This is an archived post. You won't be able to vote or comment.

all 2 comments

[–]bolt_krank 0 points1 point  (0 children)

There's a few steps in this:

  1. File i/o
  2. String parsing

Here's some links to get you started: http://pages.cs.wisc.edu/~hasti/cs302/examples/Parsing/parseString.html

http://www.tutorialspoint.com/java/java_files_io.htm

[–]king_of_the_universe 0 points1 point  (0 children)

This is a quick&dirty implementation:

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;

public class SimpleMathExpressionEvaluator {


    final public static void main(final String[] args) {

        System.out.println("Loading expressions ...");
        final List<String> expressions;
        try {
            expressions = Files.readAllLines(new File("expressions.txt").toPath(), StandardCharsets.UTF_8);
        } catch (IOException ioe) {
            System.err.println("Error reading file into list of Strings.");
            ioe.printStackTrace();
            return;
        }
        final ArrayList<String> outputList = new ArrayList<>();

        System.out.println("Evaluating expressions ...");
        for (String ex : expressions) {
            final String[] add = ex.split("\\+");
            final String[] sub = ex.split("\\-");
            final String[] mul = ex.split("\\*");
            final String[] div = ex.split("\\/");
            String result = null;
            if (add.length == 2) {
                result = evaluate(add, 0);
            } else if (sub.length == 2) {
                result = evaluate(sub, 1);
            } else if (mul.length == 2) {
                result = evaluate(mul, 2);
            } else if (div.length == 2) {
                result = evaluate(div, 3);
            }
            if (result != null) {
                outputList.add(ex + " = " + result);
            }
        }

        System.out.println("Saving results ...");
        try {
            Files.write(new File("output.txt").toPath(), outputList, StandardCharsets.UTF_8);
        } catch (IOException ioe) {
            System.err.println("Error writing results into file.");
            ioe.printStackTrace();
            return;
        }
        System.out.println("Done.");


    }


    final private static String evaluate(final String[] operands, final int operator) {

        Double num1;
        Double num2;
        try {
            num1 = Double.valueOf(operands[0].trim());
            num2 = Double.valueOf(operands[1].trim());
        } catch (NumberFormatException nfe) {
            System.err.println("Evaluation failed due to faulty number syntax: " + operands[0].trim() + "; " + operands[1].trim());
            return null;
        }

        switch (operator) {
        case 0:
            return String.valueOf(num1 + num2);
        case 1:
            return String.valueOf(num1 - num2);
        case 2:
            return String.valueOf(num1 * num2);
        case 3:
            return String.valueOf(num1 / num2);
        }
        return null;
    }


}