Java 如何标记括号?
我使用了Java 如何标记括号?,java,string,stack,stringtokenizer,Java,String,Stack,Stringtokenizer,我使用了StringTokenizer,如下所示,并期望它实际分离每个括号,但它将所有内容都作为一个标记。我如何标记它们 Stack<String> a=new Stack<>(); String S = "{[()()]}"; String temp=""; StringTokenizer str=new StringTokenizer(S); while (str.hasMoreTokens()){ temp=s
StringTokenizer
,如下所示,并期望它实际分离每个括号,但它将所有内容都作为一个标记。我如何标记它们
Stack<String> a=new Stack<>();
String S = "{[()()]}";
String temp="";
StringTokenizer str=new StringTokenizer(S);
while (str.hasMoreTokens()){
temp=str.nextToken();
a.push(temp);
}
Stack a=新堆栈();
字符串S=“{[()()]}”;
字符串temp=“”;
StringTokenizer str=新的StringTokenizer;
while(str.hasMoreTokens()){
temp=str.nextToken();
a、 推动(温度);
}
如果您尝试
StringTokenizer st = new StringTokenizer("[[]{}[[]]()]","[]{}()");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
在标记字符串时,它将返回空,但在标记所有括号之后,就没有其他内容了。如果您改为尝试:
StringTokenizer st = new StringTokenizer("[[a]{b}[[c]d]()]","[]{}()");
您将得到一个b c d-标记化值
现在,如果您想保留括号,我建议使用lookahead和lookback正则表达式:
StringTokenizer st = new StringTokenizer(z,"[]{}()");
String regEx "(?<=[{}()\\[\\]])|(?=[{}()\\[\\]])";
System.out.println(Arrays.toString(z.split();
StringTokenizer
是一个遗留类,出于兼容性原因保留它,尽管在新代码中不鼓励使用它。建议寻求此功能的任何人改用String
的split
方法或java.util.regex包。
StringTokenizer st = new StringTokenizer(z,"[]{}()");
String regEx "(?<=[{}()\\[\\]])|(?=[{}()\\[\\]])";
System.out.println(Arrays.toString(z.split();
[[, [, a, ], {, b, }, [, [, c, ], d, ], (, ), ]]