2015-12-06 17 views
0

我正在使用twitter4j API來檢索鳴叫並使用它們來分析羣集的程序,但是我在2000次鳴叫中有大約1次發生了奇怪的問題我收集。Java程序收集鳴叫,一些字符串行爲不正常

我將每個原始推文的用戶名存儲在前面的一組字符串中,並且我還有一組字符串,用於存儲「已清理」的推文,這意味着我已將每個字母都設置爲小寫字母,刪除了不是字母數字的任何字符,並刪除了所有用戶名。

用乾淨的tweet做了一些聚類分析後,它們是JSON格式的字符串,然後將乾淨的tweets與原始tweets進行交換,以下代碼行顯示了在找到正確的索引後它們是如何被替換的。 (jsonResults是一個包含JSON格式所有乾淨推文的字符串,tweetIndex是清潔推文的起始索引,espapedOrigTweet是一個包含用戶名和原始推文的字符串,已被格式化爲JSON格式):

jsonResults = jsonResults.substring(0, tweetIndex) + escapedOrigTweet + jsonResults.substring(tweetIndex + cleanedTweet.length()); 

大約99.95%的時間這個工程就像一個魅力,最終的結果是一個長字符串,所有的原始推文和用戶名以JSON格式,但0.05%的時間它可怕地失敗。

當它正常工作,它包含了所有的原始鳴叫和最終的JSON字符串開頭是這樣的:

{ 「成果」:{ 「numOfClusters」:...

但,當它出現故障,最終JSON字符串某處開始在鳴叫的中間,像這樣的問題:

#MTVStars鞋面https://t.co/3PGQWnxUMv「」 0258:...

下面是一些我嘗試過的調試輸出。我有一行代碼,在收到所有推文後,打印出原始的推文和用戶,以及它在清理後的樣子。下面的代碼:

System.out.println(twt + " --- " + cleanTweet(twt)); 

下面介紹一下此行的輸出看起來像一個正常的鳴叫:

@ mangonicci13 =保守黨捐贈卡https://t.co/rCwZCZBV7k ---保守黨捐贈卡

而且這裏是該行的輸出是一個問題的推文:

#MTVStars The Vam PS https://t.co/3PGQWnxUMv --- 11個投在哪裏vamily在mtvstars鞋面

如果有人可以幫助我能夠識別任何有關於這些破碎的鳴叫,使他們能夠以不引起被改變字符串行爲不正常,我會非常感激。謝謝閱讀!

+1

在應用程序中有太多可能會錯誤的東西,像您所描述的那樣複雜。我懷疑我們只能從您的描述中找到問題。儘管如此,猜測藍色:你可能使用任何形式的多線程? – Philipp

+0

我用來收集鳴叫的庫是多線程的,每搜索一個術語都有一個線程,但我只用它來搜索一個術語。而且,我認爲我已經適當地縮小了來自推文本身的問題,可能是特殊字符或這些罕見推文中的其他特殊字符導致Java字符串行爲異常。 –

回答

-1

我能夠找到導致這些字符串行爲如此不正常的問題。爲此,我讓每個錯誤的字符串打印unicode中每個字符的十進制值。

這樣做,我很快就發現每次問題字符串都有問題,每次有一個字符值爲13,一個「回車」字符。我寫了一個方法來從所有的tweet字符串中刪除int值爲13的任何字符,並且自此以後就沒有遇到過問題。