在Java中使用括号对表达式进行字符串标记
我正在为我的数据结构课做家庭作业,在某一点上遇到了麻烦。基本上,我有一个这样的表达在Java中使用括号对表达式进行字符串标记,java,arrays,stringtokenizer,scalar,square-bracket,Java,Arrays,Stringtokenizer,Scalar,Square Bracket,我正在为我的数据结构课做家庭作业,在某一点上遇到了麻烦。基本上,我有一个这样的表达 (varx + vary*varz[(vara+varb[(a+b)*33])])/55 我必须将方程中的变量存储在两个数组列表中,标量(对于简单变量)或数组(对于带有数组的变量)。在本例中,varx或vary等变量将进入标量数组,而varz将是一个数组,因为它在表达式的后面有一个括号。我知道当我使用代码时,StringTokenizer使标量变量易于跟踪 StringTokenizer st = new St
(varx + vary*varz[(vara+varb[(a+b)*33])])/55
我必须将方程中的变量存储在两个数组列表中,标量(对于简单变量)或数组(对于带有数组的变量)。在本例中,varx或vary等变量将进入标量数组,而varz将是一个数组,因为它在表达式的后面有一个括号。我知道当我使用代码时,StringTokenizer
使标量变量易于跟踪
StringTokenizer st = new StringTokenizer(expr, " \t*+-/()[]");
但是,这对于能够说出arrays变量是什么并不起作用,因为它也会删除括号,因为如果我打印它,将返回的答案是
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}
它会打印出来
varx
vary
varz
vara
varb
a
b
33
55
如何检查每个变量后面的括号,以确定它应该放在标量
arraylist
还是数组arraylist中?谢谢你的帮助 不是答案,但根据Javadoc forStringTokenizer
,“…StringTokenizer是一个遗留类,出于兼容性原因保留了它,尽管在新代码中不鼓励使用它…”您必须从分隔符列表中删除括号-因为标记器删除了所有分隔符,但您需要它们。我建议您一次解析一个字符,或者使用正则表达式。(您可以编写自己版本的StringTokenizer,它将分隔符作为单独的项保留在结果数组中)。顺便说一句,你还需要保留操作符。你在这项工作中使用了错误的工具。你需要给自己写一个合适的扫描器,我不是说java.util.scanner。是的,过了一段时间你就明白了。我创建了一个循环来遍历每个字符,并为每个变量创建了一个新字符串,根据旁边是否有括号将它们排序为标量或数组。谢谢你的帮助=)