我正在开发一个程序,该程序使用twitter4j API来检索推文并使用它们来分析群集,但我收集的2000条推文中约有1条出现了最奇怪的问题。
我正在用一组字符串中的前面的用户名存储每条原始推文,我还有一组字符串,其中我存储了“已清理”的推文,这意味着我已将每个字母设置为小写,删除任何不是字母数字的字符,并删除所有用户名。
在使用干净的推文进行一些聚类分析之后,他们使用JSON格式的字符串,然后我将干净的推文与原始推文交换,下面的代码行显示了一旦找到正确的索引就会替换它们。 (jsonResults是一个包含JSON格式的所有干净推文的字符串,tweetIndex是已打开的推文开始的索引,espapedOrigTweet是一个包含用户名和原始推文的字符串,已经格式化为在JSON中工作):
jsonResults = jsonResults.substring(0, tweetIndex) + escapedOrigTweet + jsonResults.substring(tweetIndex + cleanedTweet.length());
大约99.95%的时间它像魅力一样,最终结果是一个长字符串,所有原始推文和用户名都是JSON格式,但有0.05%的时间它会失败。
当它正常工作时,最终的JSON字符串包含所有原始推文并以如下所示开始:
{“results”:{“numOfClusters”:...
但是,当它失败时,最终的JSON字符串会在推文中间的某处开始出现如下问题:
#MTVStars The Vamps https://t.co/3PGQWnxUMv“,”0258:......
以下是我尝试过的一些调试输出。我有一行代码,在收到所有推文后,打印原始推文和用户以及清理后的内容。这是代码:
System.out.println(twt + " --- " + cleanTweet(twt));
以下是普通推文的这一行的输出结果:
@ mangonicci13 =保守党捐赠卡https://t.co/rCwZCZBV7k ---保守捐赠卡
这是推文的那一行的输出,这是一个问题:
#MTVStars The Vamps https://t.co/3PGQWnxUMv --- 1 1投票mtvstars vamps的vamily
如果有人可以帮助我能够识别出有关这些破碎的推文的任何内容,以便可以更改它们以便不会导致字符串表现不正常,我将非常感激。谢谢你的阅读!
答案 0 :(得分:-1)
我能够找到导致这些字符串表现得如此不规律的问题。为此,我让每个坏字符串打印unicode中每个字符的十进制值。
这样做,我很快发现每个问题字符串都有问题,每次有一个值为13的字符,一个"回车"字符。我编写了一个方法来从所有推文字符串中删除任何带有int值13的字符,并且从那时起就没有遇到过问题。