【问题标题】:How to tokenize brackets?如何标记括号?
【发布时间】:2018-09-01 08:16:46
【问题描述】:

我已经使用StringTokenizer 如下,并期望它实际上将每个括号分开,但它把所有的作为一个标记。如何标记它们?

    Stack<String> a=new Stack<>();
    String S = "{[()()]}";
    String temp="";
    StringTokenizer str=new StringTokenizer(S);
    while (str.hasMoreTokens()){
        temp=str.nextToken();
        a.push(temp);
    }

【问题讨论】:

  • StringTokenizer 是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。建议任何寻求此功能的人使用 Stringsplit 方法或 java.util.regex 包。

标签: java string stack stringtokenizer


【解决方案1】:
// write all symbols you want here on st
StringTokenizer st = new StringTokenizer(str, "@!");



String s = "Hello, i am using Stack Overflow;";
System.out.println("s = " + s);
String delims = " ,;";
StringTokenizer tokens = new StringTokenizer(s, delims);
while(tokens.hasMoreTokens())
System.out.println(tokens.nextToken());

【讨论】:

    【解决方案2】:

    如果你尝试

    StringTokenizer st = new StringTokenizer("[[]{}[[]]()]","[]{}()");
    while (st.hasMoreTokens()) {
        System.out.println(st.nextToken());
    }
    

    它将返回空,因为它正在对字符串进行标记,但在标记所有括号后没有其他内容。如果你改为尝试:

    StringTokenizer st = new StringTokenizer("[[a]{b}[[c]d]()]","[]{}()");
    

    您将获得 a b c d - 标记化的值。

    现在如果你想把括号留在那里,id推荐lookahead和lookback regex:

    StringTokenizer st = new StringTokenizer(z,"[]{}()");
    String regEx "(?<=[{}()\\[\\]])|(?=[{}()\\[\\]])";
    System.out.println(Arrays.toString(z.split();
    

    这将返回:

    [[, [, a, ], {, b, }, [, [, c, ], d, ], (, ), ]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多