2010-12-13 14 views
9

Piszę jeden program, który odczytuje i oddziela wiadomości spam i ham. Teraz czytam go przy użyciu klasy java bufferedreader. Jestem w stanie usunąć niechciane znaki takie jak '(' lub '' etc, stosując metodę replaceAll(). Chcę usunąć tagi html zbyt, w tym & wzmacniacza. Jak to osiągnąć !?usunąć znaczniki html z ciągu znaków przy użyciu java

dzięki

EDIT: Dzięki za odpowiedź, ale ja już o regex, jak połączyć obie moje potrzeby i umieścić w jednym Herezje regex używam teraz

lines.replaceAll("[^a-zA-Z]", " ") 

. UWAGA:. Dostaję linie z plik txt Jakieś inne sugestie, które są dostępne w języku angielskim?

+0

Próbowałem Jsoup..but jej nie working..no complile błąd, jego po prostu nie działa .. – Maverick

+1

Podobne tematy http://stackoverflow.com/questions/1699313/how-to-remove-html -tag-in-java http://stackoverflow.com/questions/240546/removing-html-from-a-java-string –

Odpowiedz

35

Może to będzie działać:

String noHTMLString = htmlString.replaceAll("\\<.*?>",""); 

Wykorzystuje regular expressions usunąć wszystkie znaczniki HTML w ciągu znaków.

Dokładniej, usuwa wszystkie znaczniki XML z łańcucha. Tak więc < 1234> zostanie usunięty, mimo że nie jest prawidłowym znacznikiem HTML. Ale jest dobre dla większości intencji i celów.

Mam nadzieję, że to pomoże.

+0

Drugie wywołanie, takie jak 'replaceAll (" &.*?; "," ")' spowoduje usunięcie obiektu referencje. Chociaż wydaje mi się to dziwne, że ktoś chciałby je usunąć, zamiast tłumaczyć je na znaki, które reprezentują. –

+0

Bardzo przydatne i wydajne rozwiązanie. –

+4

Uważaj na wyrażenie regularne, to nie jest pełne rozwiązanie. Zastępuje również niepożądane znaki -> używając tego wyrażenia dla ciągu znaków takiego jak "a d" oznacza "a d". –

3

Będziemy chcieli zrobić jakąś lekką analizowania strip HTML:

String extractText(String html) throws IOException { 
    final ArrayList<String> list = new ArrayList<String>(); 

    ParserDelegator parserDelegator = new ParserDelegator(); 
    ParserCallback parserCallback = new ParserCallback() { 
     public void handleText(final char[] data, final int pos) { 
      list.add(new String(data)); 
     } 
     public void handleStartTag(Tag tag, MutableAttributeSet attribute, int pos) { } 
     public void handleEndTag(Tag t, final int pos) { } 
     public void handleSimpleTag(Tag t, MutableAttributeSet a, final int pos) { } 
     public void handleComment(final char[] data, final int pos) { } 
     public void handleError(final java.lang.String errMsg, final int pos) { } 
    }; 
    parserDelegator.parse(new StringReader(html), parserCallback, true); 

    String text = ""; 

    for(String s : list) { 
     text += " " + s; 
    } 

    return text; 
} 
8

JSOUP

public static String html2text(String html) { 
    return Jsoup.parse(html).text(); 
} 
+1

Dla użytkowników maven link do maven repos dla najnowszej wersji: https://mvnrepository.com/artifact/org.jsoup/jsoup – Ben

-1

import java.io. *;

public class Html2TextWithRegExp { 


public static void main (String[] args) throws Exception{ 
StringBuilder sb = new StringBuilder(); 
BufferedReader br = new BufferedReader(new FileReader("java-new.html")); 
String line; 
while ((line=br.readLine()) != null) { 
    sb.append(line); 
    // or 
    // sb.append(line).append(System.getProperty("line.separator")); 
} 
String nohtml = sb.toString().replaceAll("\\<.*?>",""); 
System.out.println(nohtml); 
} 
} 
+0

Dlaczego stworzyłeś pusty konstruktor? –

Powiązane problemy