【发布时间】:2016-03-11 06:58:44
【问题描述】:
我正在开发一个程序,该程序使用 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 字符串如下所示:
{"结果":{"numOfClusters": ...
但是,当它失败时,最终的 JSON 字符串从推文中间的某个地方开始,问题如下:
#MTVStars 吸血鬼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 的吸血鬼在哪里
如果有人可以帮助我识别这些损坏的推文的任何内容,以便可以更改它们以避免导致字符串行为不正常,我将非常感激。感谢阅读!
【问题讨论】:
-
在您描述的如此复杂的应用程序中,有太多事情可能出错。我怀疑我们能否仅从您的描述中找出问题所在。不过,猜测一下:您是否使用了任何形式的多线程?
-
我用来收集推文的库是多线程的,你搜索的每个词都有 1 个线程,但我只用它来搜索 1 个词。而且,我认为我已经将问题适当地缩小到来自推文本身,也许这些罕见推文中的特殊字符或其他独特的东西导致 Java 字符串表现异常。