簡體   English   中英

刪除成對的方括號({},(),[])和其中的文本,並用Java中字符串中的空格替換未配對的方括號

[英]remove paired brackets({},(),[]) and text within it and replace the remaining unpaired with space in a string in Java

我有一些字符串和字符串處理后的預期輸出,

String ab =(abc)def-> def //在刪除配對的方括號和文本后返回字符串。

字符串cd = abc(def-> abc def //用空格替換未配對的括號。

字符串ef = abcdef)-> abcdef //用空格替換未配對的括號。

字符串gh =(abc)def(xyz)-> def //在刪除配對的方括號和文本后返回字符串。

String ij =(((abc)def(xyz))-> empty //返回空字符串,因為成對的括號和其中的文本已刪除。

字符串kl =(abc)def(xyz(abc)-> def xyz // //刪除成對的括號和文本並返回rest。

我需要對提供的字符串進行以下字符串操作。

對於成對的括號(),{},[],括號和其中的文本將被刪除,而未配對的括號必須用空格代替。 我嘗試了許多正則表達式和設置計數器。但是沒有按預期工作。

有任何想法嗎? 提前致謝。

您不能使用Java中的單個正則表達式來解決此任務,因為Java不支持遞歸正則表達式(盡管它們在perl中)。

解決此任務的正確方法-遵循Karthik Jeganathan解決方案-例如,創建簡單的代碼來解析您自己的字符串。

盡管您可以將regex與while循環結合使用以解決此問題。 我必須警告您,這將是非常低效的。 這是代碼:

int previousInputLength = 0;
String input;
while(input.length() != previousInputLength) {
     previousInputLength = input.length();
     input = input.replaceAll("\\([^()]*\\)", "");
}
input = input.replace("(", " ").replace(")", " ");
  1. 使用堆棧來推送字符
  2. 當推一個閉合的括號時,彈出直到開始的括號
  3. 在所有字符的末尾彈出,直到開始括號,然后重復按一個空格,直到堆棧為空。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM