Java 如何从字符串中提取单词?

Java 如何从字符串中提取单词?,java,regex,string,url,extract,Java,Regex,String,Url,Extract,假设我有一个字符串: String message=“您应该试试” 现在,我想发送“http://google.com/“到一个新的 字符串url 我想做的是: 检查字符串中的“单词”是否以“http://”开头,并提取该单词,其中单词是 被空格包围的东西(单词的一般英语定义) 我不知道如何提取字符串,我所能做的就是在字符串上使用startsWith。如何在单词上使用startsWith并提取单词? 抱歉,如果这有点难以解释。 提前谢谢 编辑:另外,我应该如何从正则表达式操作中提取单词?如果字符

假设我有一个字符串: String message=“您应该试试”

现在,我想发送“http://google.com/“到一个新的 字符串url

我想做的是: 检查字符串中的“单词”是否以“http://”开头,并提取该单词,其中单词是 被空格包围的东西(单词的一般英语定义)

我不知道如何提取字符串,我所能做的就是在字符串上使用startsWith。如何在单词上使用startsWith并提取单词? 抱歉,如果这有点难以解释。 提前谢谢


编辑:另外,我应该如何从正则表达式操作中提取单词?如果字符串中有多个url,我应该如何处理它?

使用模式和匹配器类

String str = "blabla http://www.mywebsite.com blabla";
String regex = "((https?:\\/\\/)?(www.)?(([a-zA-Z0-9-]){2,}\\.){1,4}([a-zA-Z]){2,6}(\\/([a-zA-Z-_/.0-9#:+?%=&;,]*)?)?)";
Matcher m = Pattern.compile(regex).matcher(str);
if (m.find()) {
    String url = m.group(); //value "http://www.mywebsite.com"
}
此正则表达式适用于
http://...
https://...
甚至
www.
URL。其他正则表达式可以在网上轻松找到。

您可以尝试以下方法:

String str = "blabla http://www.mywebsite.com blabla";
Matcher m = Pattern.compile("(http://.*)").matcher(str);
if (m.find()) {
    String url = (new StringTokenizer(m.group(), " ")).nextToken();
}

执行此任务的“正确”方法是按空格分割字符串--String#split(“\s”)--然后通过管道将其传递给URL构造函数。如果字符串以前缀开头,并抛出一个,则该字符串无效。URL类构造函数比您或我提出的任何解决方案都要经过更好的测试,而且更健壮。因此,请使用它,不要重新发明轮子。

您可以使用Java正则表达式: 以下正则表达式捕获以http://或https://开头的任何字符串,直到下一个空格字符:

Pattern urlPattern = Pattern.compile("(http(s)?://[.^[\\S]]*)");
Matcher matcher = compile.matcher(myString);
if (matcher.find()) {
    String url = matcher.group();
}

你应该使用一个。对于匹配URL,这是一个很好的开始。我还建议查看[String类]的文档。除了
startsWith()
@millimoose.,还有很多方法可以在字符串中查找内容。。当我读到那个链接时,我的眼睛很痛。@RohitJain耸耸肩,如果你是说Gruber,不管你对那个家伙的观点有什么看法,他公布的与编程相关的小输出是非常有用的。老实说,忽略所有答案,使用他上面评论中的链接@millimoose。它可能很难看,但它是正确的,并且会正确地匹配我们可能永远不会想到的所有类型的额外边缘情况,因为它是在反复尝试和错误之后创建的,可能需要几天、几周甚至几个月才能实现。如果我传入类似
“的内容,请访问http://example.com 更多“
这将失败,因为它会给我
“http://example.com 有关详细信息,请参见“
。请更正。我只想提取这个词。是的,忘了!现在一定没问题了。我用了John Gruber的正则表达式,用记事本把“\”换成“\”,把“\”换成“\”,让它工作起来。所以我会声明一个数组,做一个新的URL(消息);数组中每个单词的消息位置,然后查看是否存在格式错误的异常?听起来很复杂。如果我理解的没错,他想在字符串中查找URL,而不是验证它们。找到一个完整的URL比只找到从http://开始的最长或最短的子字符串更难。