2

我有一个字符串:“这是一个应该使用的 URL http://www.google.com/MyDoc.pdf ”

我只需要提取从 http 开始并以 pdf 结尾的 URL:http: //www.google.com/MyDoc.pdf

String sLeftDelimiter = "http://";
String[] tempURL = sValueFromAddAtt.split(sLeftDelimiter );
String sRequiredURL = sLeftDelimiter + tempURL[1];

这给了我“应该使用的http://www.google.com/MyDoc.pdf”的输出

在这方面需要帮助。

4

6 回答 6

12

这类问题就是正则表达式的目的:

Pattern findUrl = Pattern.compile("\\bhttp.*?\\.pdf\\b");
Matcher matcher = findUrl.matcher("This is a URL http://www.google.com/MyDoc.pdf which should be used");
while (matcher.find()) {
  System.out.println(matcher.group());
}

正则表达式解释:

  • \b在“http”之前有一个单词边界(即 xhttp 不匹配)
  • http字符串“http”(注意这也匹配“https”和“httpsomething”)
  • .*?任何字符 ( .) 任意次数 ( *),但尽量使用最少的字符 ( ?)
  • \.pdf文字字符串“.pdf”
  • \b在“.pdf”之后有一个单词边界(即 .pdfoo 不匹配)

如果您只想匹配 http 和 https,请尝试使用它而不是http在您的字符串中:

  • https?\:- 这匹配字符串 http,然后是可选的“s”(由?s 后的 s 表示),然后是冒号。
于 2012-04-16T08:57:30.900 回答
1

尝试这个

String StringName="This is a URL http://www.google.com/MyDoc.pdf which should be used";

StringName=StringName.substring(StringName.indexOf("http:"),StringName.indexOf("which"));
于 2012-04-16T08:51:58.827 回答
1

为什么不使用String 类的startsWith("http://")endsWith(".pdf")方法。

两种方法都返回布尔值,如果两者都返回true,那么您的条件成功,否则您的条件失败。

于 2012-04-16T08:43:13.933 回答
0

您可以Regular Expression在这里使用电源。首先你必须Url在原始字符串中找到然后删除其他部分。

以下代码显示了我的建议:

    String regex = "\\b(http|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
    String str = "This is a URL http://www.google.com/MyDoc.pdf which should be used";

    String[] splited = str.split(regex);

    for(String current_part : splited)
    {
        str = str.replace(current_part, "");
    }

    System.out.println(str);

此片段代码可以检索具有任何模式的任何字符串中的任何 url。https您不能在上面的正则表达式中添加自定义协议,例如协议部分。

希望我的回答对你有帮助;)

于 2012-04-16T09:05:25.397 回答
0

您可以将 String.replaceAll 与捕获组和反向引用一起使用,以获得非常简洁的解决方案:

String input = "This is a URL http://www.google.com/MyDoc.pdf which should be used";
System.out.println(input.replaceAll(".*(http.*?\\.pdf).*", "$1"));

这是正则表达式的细分:https ://regexr.com/3qmus

于 2018-06-07T17:48:10.523 回答
0
public static String getStringBetweenStrings(String aString, String aPattern1, String aPattern2) {
    String ret = null;
    int pos1,pos2;

    pos1 = aString.indexOf(aPattern1) + aPattern1.length();
    pos2 = aString.indexOf(aPattern2);

    if ((pos1>0) && (pos2>0) && (pos2 > pos1)) {
        return aString.substring(pos1, pos2);
    }

    return ret;
}
于 2016-07-28T23:40:53.363 回答