【问题标题】:Java program to collect tweets, some Strings behaving erratically用于收集推文的 Java 程序,一些字符串行为异常
【发布时间】: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 字符串表现异常。

标签: java string


【解决方案1】:

我能够找到导致这些字符串行为异常的问题。为此,我让每个坏字符串以 unicode 格式打印每个字符的十进制值。

这样做后,我很快发现每个问题字符串每次都有一个值为 13 的字符,即“回车”字符时出现问题。我写了一个方法来从所有推文字符串中删除任何 int 值为 13 的字符,并且从那以后没有遇到问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2013-07-11
    • 1970-01-01
    • 2018-12-16
    • 2017-06-01
    相关资源
    最近更新 更多