两个分隔符之间的子串

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

需要帮助。

这种问题是正则表达式的用途:

 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后面的?表示),然后是冒号。

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

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

尝试这个

 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")); 

您可以在此处使用Regular Expressionfunction。 首先,您必须在原始字符串中找到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添加到协议部分。

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

 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; } 

您可以将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