1

假设我有一个字符串: String message = "you should try http://google.com/ ";

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

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

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

编辑:另外,我应该怎么做才能从 REGEX 操作中提取单词?如果字符串中有超过 1 个 url,我应该如何处理它?

4

4 回答 4

3

使用模式和匹配器类。

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。其他的正则表达式可以很容易地在网上找到。

于 2012-11-07T20:52:10.837 回答
0

你可以试试这个:

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();
}
于 2012-11-07T21:03:08.023 回答
0

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

于 2012-11-07T21:05:19.497 回答
0

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

Pattern urlPattern = Pattern.compile("(http(s)?://[.^[\\S]]*)");
Matcher matcher = compile.matcher(myString);
if (matcher.find()) {
    String url = matcher.group();
}
于 2012-11-07T21:07:48.913 回答