我正在编写一个程序来读取和分离垃圾邮件和电子邮件。现在我正在使用bufferedreader类java来阅读它。我可以使用replaceAll()方法删除任何不需要的字符,如'('或'。'等。我也想删除html标签,包括& amp。如何实现这个目标!?
感谢
编辑: 感谢您的回复,但我已经有了一个正则表达式,如何将我的需求结合起来并融入其中。这是我现在正在使用的正则表达式。
lines.replaceAll("[^a-zA-Z]", " ")
注意:我从txt文件中获取行。 还有其他任何建议吗?!
答案 0 :(得分:35)
也许这会奏效:
String noHTMLString = htmlString.replaceAll("\\<.*?>","");
它使用regular expressions删除字符串中的所有HTML标记。
更具体地说,它从字符串中删除所有类似XML的标记。所以&lt; 1234&gt;即使它不是有效的HTML标记,也会被删除。但它对大多数意图和目的都有好处。
希望这有帮助。
答案 1 :(得分:8)
public static String html2text(String html) {
return Jsoup.parse(html).text();
}
答案 2 :(得分:3)
您需要进行一些轻量级解析来剥离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;
}
答案 3 :(得分:-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);
}
}