亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何用特殊字符拆分字符串并忽略括號內的所有內容?

如何用特殊字符拆分字符串并忽略括號內的所有內容?

倚天杖 2022-06-15 16:58:40
我想用“/”分割字符串并忽略外括號內的“/”。示例輸入字符串:"Apple 001/(Orange (002/003) ABC)/Mango 003 )/( ASDJ/(Watermelon )004)/Apple 002 ASND/(Mango)"字符串數組中的預期輸出:["Apple 001", "(Orange (002/003) ABC)", "Mango 003 )/( ASDJ", "(Watermelon )004)", "Apple 002 ASND", "(Mango)"]這是我的正則表達式:\/(?=(?:[^\(\)]*\([^\(\)]*\))*[^\(\)]*$)但它只能支持這樣的簡單字符串:"Apple 001/(Orange 002/003 ABC)/Mango 003 ASDJ/(Watermelon 004)/Apple 002 ASND/(Mango)"如果有內括號,則結果不正確。
查看完整描述

1 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

這是一個可以實現您需求的解析器示例:


public static List<String> splitter(String input) {

    int nestingLevel=0;

    StringBuilder currentToken=new StringBuilder();

    List<String> result = new ArrayList<>();

    for (char c: input.toCharArray()) {

        if (nestingLevel==0 && c == '/') { // the character is a separator !

            result.add(currentToken.toString());

            currentToken=new StringBuilder();

        } else {

            if (c == '(') { nestingLevel++; }

            else if (c == ')' && nestingLevel > 0) { nestingLevel--; }


            currentToken.append(c);

        }

    }

    result.add(currentToken.toString());

    return result;

}

你可以在這里試試。


請注意,它不會導致您發布的預期輸出,但我不確定您遵循什么算法來獲得這樣的結果。特別是我已經確保沒有“負嵌套級別”,所以對于初學者來說,/in"Mango 003 )/( ASDJ"被認為在括號之外并被解析為分隔符。


無論如何,我確信您可以比正則表達式答案更容易地調整我的答案,我的答案的全部意義在于表明編寫解析器來處理此類問題通常比費心嘗試制作正則表達式更現實。


查看完整回答
反對 回復 2022-06-15
  • 1 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號