我正在写一个小计算器应用程序,并使用一个简单的标记器来解析用户输入到列表中进行后续处理。与Stringbuilder的神秘空白
的方法是这样的:
public LinkedList<String> tokenize(String infix) throws Exception
{
LinkedList<String> tokens = new LinkedList<String>();
StringBuilder operand = new StringBuilder("");
char current;
int index = 0;
while(index <= infix.length() -1) {
current = infix.charAt(index);
if(!isOperator(current)) {
operand.append(current);
} else {
// Add the operand stack
tokens.add(operand.toString());
operand = new StringBuilder("");
// Add the operator
tokens.add(Character.toString(current));
}
index++;
}
// The trailing operator
tokens.add(operand.toString());
return tokens;
}
我已经设置了这种方法的测试,看起来是这样的:
public void testTokenizer() throws Exception
{
LinkedList<String> list = parser.tokenize("35+35");
assertTrue(list.get(0) == "35" &&
list.get(1) == "+" &&
list.get(2) == "35");
}
然而,失败的原因是分词似乎添加空格到令牌。例如,打印从字符串“35 + 35”标记的列表给我:
[35, +, 35]
这是怎么回事?
另外请注意,字符串比较是错误的,您不能使用'=='来测试相等性,请使用'equals()'。例如:''35“.equals(list.get(0))' –