Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用括号对表达式进行字符串标记_Java_Arrays_Stringtokenizer_Scalar_Square Bracket - Fatal编程技术网

在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 for
StringTokenizer
,“…StringTokenizer是一个遗留类,出于兼容性原因保留了它,尽管在新代码中不鼓励使用它…”您必须从分隔符列表中删除括号-因为标记器删除了所有分隔符,但您需要它们。我建议您一次解析一个字符,或者使用正则表达式。(您可以编写自己版本的StringTokenizer,它将分隔符作为单独的项保留在结果数组中)。顺便说一句,你还需要保留操作符。你在这项工作中使用了错误的工具。你需要给自己写一个合适的扫描器,我不是说java.util.scanner。是的,过了一段时间你就明白了。我创建了一个循环来遍历每个字符,并为每个变量创建了一个新字符串,根据旁边是否有括号将它们排序为标量或数组。谢谢你的帮助=)