为什么这总是返回-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
答案 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
包含推文文字。
我不太清楚为什么我的样本输入也失败了。也许它在印刷品执行之前没有失败但是在下一次失败了。