我正在创建一个IRC机器人,它抓取Twitter链接并将文本发送到频道。这是我的代码:


 if(messageIC.contains(“https://twitter.com/”)&& messageIC.contains(“/ status /“)){
试试{
 String tweeter = message.substring(20);
 String [] tweety = tweeter.split(“”);
字符串tweety1 = tweety [0];
 String url =“https://twitter.com/”+ tweety1;
 Document doc = Jsoup.connect(url).get();
元素tweetText = doc.select(“p.js-tweet-text.tweet-text”)。first();
 sendMessage(channel,“Twitter:”+ tweetText.text());
 } catch(IOException ex){
 Logger.getLogger(Ampersand.class.getName())。log(Level.SEVERE,null,ex);
 }
}



 如果用户仅发送链接,或者即使用户在链接后输入了某些内容,这也适用。但是如果用户在链接之前输入内容,它就不起作用,例如“blahblahblah http:/ /www.twitter.com/user/status/xxxx “因为它会立即开始抓取而不是在twitter.com之后。


有没有办法在twitter.com?
之后才抓住子串;答案 0 :(得分:3)
您可以使用indexOf
和substring
。首先通过获取"https://twitter.com/"
的索引来获取链接的开头。然后在链接开始后查找空格,如果存在链接在那里结束,否则它在message
的末尾结束。然后我们可以使用substring
方法获取链接:
int startIndex = message.indexOf("https://twitter.com/");
int endIndex = message.indexOf(" ", startIndex);
if (endIndex == -1) {
endIndex = message.length();
}
String link = message.substring(startIndex, endIndex);
另一种简单方法,split
按空格划分所有内容,并检查它们是否符合要求:
String[] words = message.split(" ");
for (String word : words) {
if (word.startsWith("https://twitter.com/")) {
// ...
}
}
答案 1 :(得分:1)
您可以使用字符串indexOf(String str)
方法查找http://etc
的位置。然后,您可以使用indexOf(String str, int fromIndex)
方法查找URL后面的第一个空格。最后,将substring(int beginIndex, int endIndex)
与这两个值一起使用。
我不会给你完整的代码;你将通过自己写作来学习。
答案 2 :(得分:-1)
对完整字符串使用字符串indexOf(String s)
方法。然后将int添加到目标String的长度(在本例中为"www.twitter.com"
)并将其用作子字符串的起始索引。
String s = "http://www.twitter.com/user/status/xxxx";
String target = "www.twitter.com";
int index = s.indexOf(target);
int subIndex = index + target.length();
System.out.print(s.substring(subIndex));