我正在尝试解析一个带有负数和负号的字符串,并将每个标记添加到一个名为infix的队列中,并添加一个函数来判断标记是否是运算符。但是,负数被视为负号,并被添加到与负数分开的队列中。这是我的代码,用于将字符串分解为数字并将它们添加到队列中。
for(int i = 0;i < expression.length();i++) // add all items from the expression to the infix queue
{
String value = String.valueOf(expression.charAt(i));
if(eval.isOperator(value) == true)
{
infix.add(value);
}
else
{
for(int j = i+1; eval.isOperator(String.valueOf(expression.charAt(j))) == false; j++)//add token to value until an operator is found and that number ends
{
value += expression.charAt(j);
i++;
}
infix.add(value);
}
}
还有eval类
public class Eval
{
public boolean isOperator(String n)
{
switch(n)
{
case "(":
return true;
case ")":
return true;
case "*":
return true;
case "/":
return true;
case "+":
return true;
case "-":
return true;
case "#":
return true;
}
return false;
}
public int Priority(String op)
{
switch(op)
{
case "(":
return 3;
case "*":
return 2;
case "/":
return 2;
case "+":
return 1;
case "-":
return 1;
}
return 0;
}
}
}
public class Eval
{
boolean binaryOp = false;
public boolean isOperator(String n)
{
switch(n)
{
case "(":
return true;
case ")":
return true;
case "*":
;
case "/":
;
case "+":
binaryOp = true;
return true;
case "-":
If (binaryOp) break;
case "#":
return true;
}
binaryOp = false;
return false;
}
public int Priority(String op)
{
switch(op)
{
case "(":
return 3;
case "*":
return 2;
case "/":
return 2;
case "+":
return 1;
case "-":
return 1;
}
return 0;
}
}
大多数语言处理此问题的方法是稍后执行。正如@Sweeper所说,-
将是一个操作符,稍后的代码将选择这是二进制操作符还是一元操作符。假设您计划在某个时候评估这些表达式,那么这样做最终真的不会有太多额外的工作。
但是,为了按照您的方式处理它,我首先提取一些函数,可能是<code>eval。lexNumber(字符串表达式,整数索引)
for(int j = i+1; eval.isOperator(String.valueOf(expression.charAt(j))) == false; j++)
然后,这只是一个显式检查的问题:
if (value == "-" && isNumber(expression.charAt(j+1))
{
// I assume you have access to some sort of isNumber function
// and that you can check for an out of bounds access on your own
infix.add("-" + lexNumber(expression, j+1));
}
else if(eval.isOperator(value) == true)
{
infix.add(value);
}
else
{
// etc
}
这是一个粗略的、未经测试的朝着正确方向的推动,忽略了小问题。特别是更新循环索引的问题。我建议使用一些新类来封装表达式源以及当前位置。类似于:
while (tokenStream.hasNext())
{
infix.add(tokenStream.next());
}
问题内容: 我有一个字符串,我正在尝试将其解析为一个数字。我尝试使用,结果为2。我猜逗号是问题所在,但我将如何以正确的方式解决此问题?只需删除逗号? 问题答案: 是的,删除逗号:
我是cucumber自动化测试的新手,我有一个maven项目,我试图传递一个字符串,但我有这个错误。
这是我的代码后运行这段代码,我得到异常: 以下给出了堆栈跟踪的异常: 请帮我解决这个问题。
我在解析antlr4中的格式行列表时遇到了一个问题 但这是失败的第一个字符识别'*'本身,这使我困惑。 第1行:0不匹配的输入'*这是一个字符串',应为'*'
我对正则表达式很陌生。我需要构造一个正则表达式,如果在下面的代码中使用,它将生成一个只有字母(大小写)、数字、、、和。 以下表达式不起作用:。它替换了一些字母,而不是所有不需要的字符。为什么它不起作用?
2.密码必须至少包含一个大写字母、一个小写字母、一个数字和一个标点符号。(例如a-z,a-z,0-9,!@#$%^&*()_+~-=`{}[]:“;'<>?,./) 我尝试使用:{}:“;'<>?,./-][])$` 但是,当我在中测试时,标点符号部分的解释并不清楚 标点符号的解释好像坏了,可以解释一下原因并帮我完成这个。