2011-08-17 12 views
8

Mam program, który pobiera ciąg wejściowy. Chcę usunąć wszystko wewnątrz znaków "<" i ">". Na przykład jeśli ciąg mówiJak usunąć cały podciąg z '<' to '>' w Javie

"P.S.<!-- 
BODY 
    { 
    color:white; 
    background-color: transparent; 
    font-family:sans-serif; 
    } 
--> Hello how are you today?" 

chcę ciąg wyjściowy tylko zawierać "P.S. Hello how are you today?". Czy jest prosty sposób na to w Javie? Dzięki

+1

i„<"/">”kombinacja istnieje tam tylko raz lub wiele razy ? –

+1

Polecam, mając na celu '', a nie '<*>', więc faktycznie wyciągasz komentarze, a nie tylko jakieś tagi. – corsiKa

Odpowiedz

22

użyć wyrażenia regularnego:

newstr = str.replaceAll("<[^>]*>", ""); 

Oznacza to, aby znaleźć każdy podciąg rozpoczynający <, a następnie dowolną liczbę znaków, które nie są >, a następnie znak >. Następnie zastąp wszystkie te ciągi pustym ciągiem, "".

referencyjny: java.lang.String.replaceAll()

+0

Może miałeś na myśli '<[^>] *>'? Obecne wyrażenie regularne zmieni " pasek <.>" 'na' "<.>" ', nie' "pasek" '. –

+0

@Mike Samuel: Już edytowane, dzięki. Stało się tak, że początkowo chciałem użyć niechętnego kwantyfikatora, tj. '/ <.*?> /', ale zdecydowałem się przeciw konceptualnej złożoności korzystania z niego. Wprowadziłem błąd edycji w procesie zmiany mojej decyzji. – Nayuki

+0

Dzięki, ta metoda zadziałała naprawdę dobrze. Czy istnieje metoda typu replaceAll dla klasy Spanned? – Sean

0

Jeśli wolisz unikać wyrażeń regularnych można użyć podciąg:

String origText = "P.S.<!--"+ 
    "BODY"+ 
     "{"+ 
     "color:white;"+ 
     "background-color: transparent;"+ 
     "font-family:sans-serif;"+ 
     "}"+ 
    "--> Hello how are you today?"; 
String revised = origText.substring(0, origText.indexOf('<')) + 
    origText.substring(origText.lastIndexOf('>')+1, origText.length()); 

`Java String Class Reference

+0

To zawiedzie w 'String text =" Ten is test. ";' ' – corsiKa

+0

Rzeczywiście. Aby to naprawić, po prostu zamień 'lastIndexOf ('>')' na 'indexOf ('>')'. – Nayuki

+0

@glowcoder: true, ale OP nie określił wielu wystąpień. –

Powiązane problemy