Search code examples
javaregexstringstring-parsing

Using Java remove unbalanced/unpartnered parenthesis


I want to remove all the "unpartnered" or unpaired parenthesises from a string.

exampleStr = back-pay) zyzhk1219(17) zyzhk1329 zyzhk1595(15) zyzhk1988 zyzhk2004 zyzhk2131) jswioj((testsjkldf

The expected "parenthesis balanced" string should be

back-pay zyzhk1219(17) zyzhk1329 zyzhk1595(15) zyzhk1988 zyzhk2004 zyzhk2131 jswiojtestsjkldf

I saw some ruby based solution on stackoverflow. But, couldn't find one I can use in java.


Solution

  • How it might be done in pseudo-code:

    initialize parenLevel = 0
    for each character in string
        if char is ( increment parenLevel
        if char is )
            if parenLevel = 0, remove bad paren
            else, decrement parenLevel
    next
    
    initialize parenLevel = 0
    for each character in string in reverse
        if char is ) increment parenLevel
        if char is (
            if parenLevel = 0, remove bad paren
            else, decrement parenLevel
    next
    

    How it might be implemented in practice: http://ideone.com/K3s0X

    Sample result:

    back-pay zyzhk1219(17) zyzhk1329 zyzhk1595(15) zyzhk1988 zyzhk2004 zyzhk2131 jswiojtestsjkldf