2010-11-16 91 views
1

是否有一個JAVA庫來剪輯從電子郵件中引用的文本?JAVA電子郵件 - 剪輯引用行

如果是HTML郵件,我到目前爲止使用了一個HTML解析器,並從DOM樹中刪除了塊引號,但我在純文本格式上遇到了更多麻煩。

我想正則表達式:

emailBody = emailBody.replaceAll("\n>[^\n]*?\n", "\n"); 

,但我根本不是掌握它,所以我雖然必須有一個解決方案,因爲它涉及更多的人我想一個問題。 上面的代碼會替換所有新行(在\ n之後)以及以>開頭的行,只要有其他內容並以\ n結尾,則不包含任何其他新行。另外,我認爲應該從郵件的末尾開始替換,等等。這比這行代碼複雜一點。

所以任何幫助,歡迎!

乾杯, 巴拉茲

+0

我敢肯定Java郵件(javax.mail *。 )會給你的文字的電子郵件,而不必進行任何分析等。 – 2010-11-16 10:04:24

+0

但是發短信的文本是電子郵件正文的一部分,所以默認情況下它不會將其剪下。你能告訴我一個例子嗎? – 2010-11-16 10:12:56

+0

對不起,我誤解你的意思是「引用」 – 2010-11-16 11:00:47

回答

1

不要我給你的權利,你認爲每個有>開始字符一個引述線線?

這裏有一個快速的解決方案:

String[] lines = emailBody.split("\n"); 
StringBuilder clippedEmailBuilder = new StringBuilder(); 
for (String line:lines) 
    if (!line.startsWith(">")) 
    clippedEmailBuilder.append(line); 
emailBody = clippedEmailBuilder.toString(); 
+0

好吧,差不多。我想在郵件的末尾替換帶引號的行(以>開頭),但如果有人做了內嵌引用 - 回答,那麼我不會替換它。但使用StringBuilder是一個好主意。我想我會在最後結束時開始,如果有一行不以>開始,循環停止。 – 2010-11-16 10:31:44

0

我不知道你想什麼你的RE做的,但考慮到每一行以「>」被引用郵件正文,你可以進行篩選出以下各項:

emailBody.replaceAll(">.*\n", "") 

這將每行匹配以「>」和更換(包括新行)爲空字符串

+0

是的,但是。也可以包括\ n,所以這就是爲什麼我的表達式中的[^ n]。但我的起點也是你的代碼。問題在於,如果消息中有任何一點,它將從該點取代整個文本。 – 2010-11-16 10:34:25

+1

對我來說馬虎。這應該做的更好,然後Pattern.compile(「^>。* \ n」,Pattern.MULTILINE).matcher(emailBody).replaceAll(「」);認爲它不會支持聯機評論的情況下沒有得到削減。我認爲你需要一個非正則表達式解決方案 – charisis 2010-11-16 10:51:41