以下是我正在尝试做的一个例子,它应该引导我走向正确的轨道
我有一个txt文件,如:
2*3
4-4
4+2
8*1
对于每一行,我需要分隔数字并确定动作类型(例如第一行中的乘法),这样我就可以创建以下输出:
6
0
6
8
我应该使用分隔符来分隔它们(不太清楚该怎么做 因为分隔符可能是+, - ,*和/)?
或者使用for循环? (我当然希望避免这个...)
答案 0 :(得分:4)
一个解决方案(没有错误检查,如果需要,可以添加它)可以使用:
<强> myfile.txt的强>
2 + 2
代码段
Scanner sc = new Scanner(new File("myfile.txt"));
double firstNumber = sc.nextDouble();
String operation = sc.next("[+-/\\*]");
double secondNumber = sc.nextDouble();
double result;
if("+".equals(operation))
result = firstNumber + secondNumber;
else if("-".equals(operation))
result = firstNumber - secondNumber;
else if("*".equals(operation))
result = firstNumber * secondNumber;
else if("/".equals(operation))
result = firstNumber / secondNumber;
else
System.out.println("Operation unrecognized");
System.out.println(firstNumber + operation + secondNumber + " = " + result);
答案 1 :(得分:3)
这是一个非常简单的答案,如果没有像你描述的那样形成数据,那么这个答案并不十分强大。
static Pattern pattern = Pattern.compile("([0-9]+)([+-/\\*])([0-9]+)");
public static int calculate(String arg) {
Matcher matcher = pattern.matcher(arg);
if (matcher.find()) {
int a = Integer.parseInt(matcher.group(1));
int b = Integer.parseInt(matcher.group(3));
String operator = matcher.group(2);
if ("+".equals(operator)) {
return a+b;
} else if ("-".equals(operator)) {
return a-b;
} else if ("/".equals(operator)) {
return a/b;
} else if ("*".equals(operator)) {
return a*b;
}
}
throw new IllegalArgumentException("Could not parse '" + arg + " '");
}
它将字符串解析为三个组,第一组数字,然后是(+, - ,/或*)中的一个,然后是另一组数字。
答案 2 :(得分:1)
//puesdocode
while end of file not reached
{
int x = next int from input file
char ch = next char from input file
int y = next int from input file
int z;
switch(ch)
{
case '*': z = x*y; break;
case '/': z = x/y; break;
case '-': z = x-y; break;
case '+': z = x+y; break;
}
println to file (z);
}
答案 3 :(得分:0)
我建议使用arity - Arithmetic Engine for Java,而不是构建自己的(因为当你开始支持每行的多个操作/操作数时,这会变得复杂)。以下是他们网站的示例。
import org.javia.arity.Symbols;
import org.javia.arity.SyntaxException;
public class Try {
public static void main(String args[]) throws SyntaxException {
Symbols symbols = new Symbols();
double value = symbols.eval("2^10");
}
}
答案 4 :(得分:0)
ScriptEngine的ECMAScript(JavaScript)引擎可以逐行进行计算。