Как токенизировать скобки? - PullRequest
0 голосов
/ 01 сентября 2018

Я использовал StringTokenizer следующим образом и ожидал, что он фактически разделит все скобки, но он воспринимал все как маркер. Как я могу их токенизировать?

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

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Если вы попробуете

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

Он вернется пустым, поскольку он токенизирует строку, но больше ничего не останется после токенизации всех скобок. Если вы вместо этого попробуйте:

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

Вы получите b b d - токенизированные значения.

Теперь, если вы хотите оставить скобки там, я рекомендую lookahead и regex lookback:

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

, который вернется:

[[, [, a, ], {, b, }, [, [, c, ], d, ], (, ), ]]
0 голосов
/ 01 сентября 2018
// 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());
...