wie man alle "() und den darin enthaltenen Text" in Java String entfernt

8

Ich muss nach dem Löschen von Klammern und Text in ihnen in Java String fragen. Zum Beispiel habe ich

%Vor%

Nun ist die Frage, wie man den Teilstring "(Software)" hier ohne Verwendung von

entfernen kann %Vor%

weil vielleicht in der nächsten Folge ich "Ich bin ein neuer (Elektrischer) Ingenieur" oder "(Mechanisch") oder etwas in der Art bin.

Wie kann ich das tun? Ich denke, ein Weg besteht darin, den Index von "(" und ") zu bekommen und sie zu entfernen / ersetzen, indem ich diese Indizes verwende, aber ich hoffe, dass es einen kürzeren Weg dafür gibt

    
Husnain Iqbal 02.10.2013, 11:46
quelle

2 Antworten

22

Verwenden Sie regex, um alles in eckigen Klammern zu finden:

%Vor%

Beachten Sie, dass die Klammern maskiert werden müssen und dass das Escape-Zeichen \ selbst im String maskiert werden muss, daher die doppelten Backslashes.

Der Ausdruck .*? ist eine widerwillige Übereinstimmung, was bedeutet, dass es nicht bis zur letzten Klammer überspringt, falls zwei eingeklammerte Terme in der Eingabe sind, dh "a (foo ) b (bar) c "würde" ac "werden, wenn .* verwendet würde, weil es alles von der ersten offenen Klammer bis zur letzten geschlossenen Klammer verbrauchen würde.

Ich habe am Ende ein optionales Leerzeichen hinzugefügt, damit Sie nicht zwei benachbarte Leerzeichen übrig haben, nachdem Sie den dazwischen liegenden Begriff entfernt haben.

    
Bohemian 02.10.2013, 11:48
quelle
3

Am effektivsten und narrensichersten wäre es, den gesamten String zu durchlaufen und nach Klammern zu suchen. Es würde nur einen einzigen Durchlauf erfordern.

Sie müssen auch die Anzahl der geöffneten und geschlossenen Klammern beobachten, um sicherzustellen, dass der Algorithmus für Sätze wie outside (a text (in another) parenthesis) outside again korrekt ist, was in outside outside again resultieren sollte.

Ein Code, der mehr oder weniger das tut.

%Vor%     
Dariusz 02.10.2013 12:13
quelle

Tags und Links