0

我正在尝试编写一种进行加法和减法的方法

使用 indexOf() , lastIndexOf()

例如 string s = "3 + 3" 我想把这个字符串分成两个子字符串然后做一些操作。

// for addition
String s = "3 + 3";
int indexOfPlus = s.indexOf('+');

String beforePlus = s.substring(0,indexOfPlus);
String afterPlus= s.substring(indexOfPlus+1);
 .....
 .....

// for subtraction
String s = "3 - 3";
int indexOfMinus = s.indexOf('-');

String beforeMinus = s.substring(0,indexOfMinus);
String afterMinus = s.substring(indexOfMinus+1);

 ....
 ....

我的问题是:但是,我不确定如何将诸如“3+ -1”或“3-+1”之类的字符串分解为子字符串。

4

4 回答 4

1

首先,我建议为每个操作数和操作使用单独的字段,这样您就不必拆分任何内容而只需解析数字。

有一种叫做正则表达式的东西,虽然它有点先进,但它可以让你使用 String.split() 方法更轻松地执行这些操作,这个方法将正则表达式作为参数并将分割后的字符串作为数组返回,例如 (" 5+5").split("[-+]") 将分别返回 5 和 5 作为字符串。

using indexOf only I would do something like this (for "3- +1"):

int i1,i2;
String op;
i1 = s.indexOf("-");
i2= s.indexOf("+");
if ( i1<0 || i2<0)
   //only one operation
else if(i1<i2)
   //minus logic;
else if (i2<i1)
   // plus logic
于 2012-12-04T10:19:51.130 回答
1

你可以做的是,首先检查你的字符串,然后使用 doo 运算(即“1+-1”->“1-1”、“1--1”->“1+1”等)有操作

于 2012-12-04T10:07:02.237 回答
1

我会将 + 和 - 中的每一个都视为两个不同的运算符,一个二元运算符和一个一元运算符。如果您在表达式的开头或在另一个运算符之后看到“-”,则它是一元-。如果您在两个表达式之间看到它,它是二进制的。在 AST 形式中,一元 - 有一个孩子,二元 - 有两个孩子。

于 2012-12-04T10:08:56.913 回答
1

使用 javax.script.ScriptEngineManager:

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("js");<br>
Object result = engine.eval("3+ -4");<br>
System.out.println(result);<br>

输出:-1.0

或者

使用 BeanShell http://www.beanshell.org/download.html
Interpreter interpreter = new Interpreter();

interpreter.eval("result = 3+-4");<br>
System.out.println(interpreter.get("result"));<br>

输出:-1

于 2012-12-04T10:25:24.183 回答