两个分隔符之间的子串

时间:2012-04-16 08:41:01

标签: java split substring

我有一个字符串:“这是一个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”

需要帮助。

6 个答案:

答案 0 :(得分:11)

这类问题是正则表达式的用法:

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之后由?表示)然后是冒号。

答案 1 :(得分:1)

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

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

答案 2 :(得分: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"));

答案 3 :(得分: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);

此代码段可以使用任何模式检索任何字符串中的任何网址。 您无法将自定义协议(例如https)添加到上述正则表达式中的协议部分。

我希望我的回答可以帮助你;)

答案 4 :(得分: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;
}

答案 5 :(得分: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