【发布时间】:2014-02-16 15:52:02
【问题描述】:
我正在编写一个小计算器应用程序,并使用一个简单的标记器将用户输入解析为列表以供后续处理。
方法如下:
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))
标签: java string stringbuilder