Java中的indexOf(“@”)方法

时间:2014-08-03 03:14:18

标签: java android twitter4j indexoutofboundsexception indexof

为什么这总是返回-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);
    }

显然,提及启动是-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

2 个答案:

答案 0 :(得分:4)

没有。你的字符串不包含你的想法,

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

答案 1 :(得分:0)

我用我的应用修复了问题。

    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包含推文文字。

我不太清楚为什么我的样本输入也失败了。也许它在印刷品执行之前没有失败但是在下一次失败了。