【问题标题】:indexOf("@") method in JavaJava 中的 indexOf("@") 方法
【发布时间】:2014-08-03 03:14:18
【问题描述】:

为什么总是返回 -1? 这与'@'作为注释符号有什么关系吗?

如何搜索第一次出现的以“@”开头的子字符串?

 UserMentionEntity[] userMentionEntities = status.getUserMentionEntities();
    for (UserMentionEntity ume : userMentionEntities) {
        final String mention = ume.getText();
        int mentionStart = text.indexOf("@" + mention);
        int mentionEnd = mentionStart + mention.length();
        ss.setSpan(new ForegroundColorSpan(Color.parseColor(COLOR)), mentionStart, mentionEnd + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }

显然,mentionStart 是 -1。 我正在使用 twitter4j 库。

示例:

text: RT @Cornerstone_TMC Thank you @ukgdos at sa lahat ng nag-abang kanina kay @yengpluggedin! #SeenZoned @academyofrocksg… http://t.co/rsLqjlZJgg
mention: ukgdos

【问题讨论】:

  • text 的值是多少? mention 的值是多少?
  • 发布样本和预期结果。
  • 我收到来自公开个人资料的推文。没什么特别的。像这样:“穿着@snh_fashion 平底鞋。????fb.me/3CustlXWH
  • @user3903214 谢谢。现在你有一个正确的问题。
  • java.lang.IndexOutOfBoundsException: setSpan (-1 ... 6) 在 0 之前开始

标签: java android twitter4j indexoutofboundsexception indexof


【解决方案1】:

没有。您的字符串不包含您认为的内容,

String mention = "not";
String text = "I do @not think so.";
int mentionStart = text.indexOf("@" + mention); 
System.out.printf("%d%n", mentionStart);

打印

5

编辑

根据您现在提供的文字和提及

String text = "RT @Cornerstone_TMC Thank you @ukgdos "
    + "at sa lahat ng nag-abang kanina kay @yengpluggedin! "
    + "#SeenZoned @academyofrocksg… http://t.co/rsLqjlZJgg";
String mention = "ukgdos";
int mentionStart = text.indexOf("@" + mention); 
System.out.printf("%d%n", mentionStart);

打印

30

【讨论】:

  • 我很确定它确实如此。之后打印。我会更新我的问题
  • 你能把 real 字符串放在你的帖子里吗?
  • “我很确定它确实……”。我们非常确定它不会!
  • 感谢您澄清这一点。我认为这与“@”符号有关。我已经解决了我的问题。
【解决方案2】:

我解决了我的应用程序的问题。

    UserMentionEntity[] userMentionEntities = status.getUserMentionEntities();
    for (UserMentionEntity ume : userMentionEntities) {
        final String mention = ume.getText().toLowerCase();
        int mentionStart = text.toLowerCase().indexOf("@" + mention);
        int mentionEnd = mentionStart + mention.length();
        ss.setSpan(new ForegroundColorSpan(Color.parseColor(COLOR)), mentionStart, mentionEnd + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }

我注意到 Twitter 允许您更改提及中的大小写。

@yengPLUGGEDin 可以显示为@yengpluggedin,以便代码中的ume.getText() 返回正确的屏幕名称,而text 包含推文原样。

我不太确定为什么我的示例输入也失败了。也许它没有,但在执行打印之前的下一个失败。

【讨论】:

    猜你喜欢
    • 2020-06-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多