【发布时间】:2013-09-25 15:08:41
【问题描述】:
我正在创建一个对布尔逻辑表达式进行标记并返回标记字符串数组的程序。以下是我的代码:
public static String[] tokenize(String s)
{
String delims = "+";
StringTokenizer st = new StringTokenizer(s, delims);
String[] tokens = new String[st.countTokens()];
int i=0;
while (st.hasMoreElements()) {
tokens[i++] = st.nextElement().toString();
}
return tokens;
}
例如,我有以下字符串作为输入:
A+B+(C+D+(A+B))+(B+C)
使用我拥有的代码,它只会生成以下标记:
A
B
(C
D
(A
B))
(B
C)
是否有可能(使用相同的代码结构)提出这些标记?如果不是,它是如何编码的?
A
B
(C+D+(A+B))
(B+C)
【问题讨论】:
-
您可以一次循环遍历 1 个字符,当您到达 + 而不是括号时,将读取的字符保存到那里,然后开始一个新的集合。跟踪您是否在一组括号中的方法是使用计数器。当您点击一个左括号时,您将计数器加 1,当您点击右括号时,您将计数器减 1。如果计数器 > 0,那么您在括号中。哦,如果 counter 为负数,则字符串无效,如果 counter 最后不为 0,则字符串也是无效的。
标签: java stringtokenizer