Java 两个分隔符之间的子字符串
我有一个字符串:这是一个应该使用的URL 我只需要提取从http开始到pdf结束的URL: 这给我的输出是http://www.google.com/MyDoc.pdf 应该使用哪种方法 需要这方面的帮助。为什么不使用startsWithhttp://和endsWith.pdf字符串类的方法呢 这两个方法都返回布尔值,如果两者都返回true,则您的条件成功,否则您的条件失败。为什么不使用startsWithhttp://和endsWith.pdf mthods字符串类呢 这两个方法都返回布尔值,如果都返回true,则您的条件成功,否则您的条件失败。尝试此方法Java 两个分隔符之间的子字符串,java,split,substring,Java,Split,Substring,我有一个字符串:这是一个应该使用的URL 我只需要提取从http开始到pdf结束的URL: 这给我的输出是http://www.google.com/MyDoc.pdf 应该使用哪种方法 需要这方面的帮助。为什么不使用startsWithhttp://和endsWith.pdf字符串类的方法呢 这两个方法都返回布尔值,如果两者都返回true,则您的条件成功,否则您的条件失败。为什么不使用startsWithhttp://和endsWith.pdf mthods字符串类呢 这两个方法都返回布尔值
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"));
试试这个
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"));
这类问题就是正则表达式的用途:
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之后,然后是冒号。
这类问题就是正则表达式的用途:
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之后,然后是冒号。
您可以在这里使用正则表达式功能。
首先,您必须在原始字符串中找到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;
}
首先,您必须在原始字符串中找到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)添加到上述正则表达式中的协议部分
我希望我的回答能帮助你 您可以将String.replaceAll与捕获组和反向引用一起使用,以获得非常简洁的解决方案:
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 input = "This is a URL http://www.google.com/MyDoc.pdf which should be used";
System.out.println(input.replaceAll(".*(http.*?\\.pdf).*", "$1"));
下面是正则表达式的分解:您可以将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"));
下面是正则表达式的分解:与此问题相关,请查看:[如何检测字符串中是否存在URL][1][1]:与此问题相关,请查看:[如何检测字符串中是否存在URL][1][1]:非常感谢..这一条确实有帮助…因为URL后面的文本可以是任何内容,因此,这个用于提取URL的正则表达式就是我所需要的。如果您想支持任意字符串,这些字符串要么是URL,要么看起来像URL,但没有协议处理程序,例如www.foo.com,那么使用Gruber的正则表达式,感谢您给出清晰的答案……我使用的是:Pattern findUrl=Pattern.compile\\b version-.\\\.0.0\\b;Matcher Matcher=findUrl.matcherresponse.toString;如果matcher.find{System.out.printlnmatcher.group.substring10,13;//获取子字符串}非常感谢..这一个非常有用…因为url后面的文本可以是任何内容,因此,这个用于提取URL的正则表达式就是我所需要的。如果您想支持任意字符串,这些字符串要么是URL,要么看起来像URL,但没有协议处理程序,例如www.foo.com,那么使用Gruber的正则表达式,感谢您给出清晰的答案……我使用的是:Pattern findUrl=Pattern.compile\\b version-.\\\.0.0\\b;Matcher Matcher=findUrl.matcherresponse.toString;if matcher.find{System.out.printlnmatcher.group.substring10,13;//获取子字符串}请注意,此模式与国际化域名不匹配,例如请注意,此模式与国际化域名不匹配,例如问题指出他有一个字符串,其中包含应使用的URL。我看不出startsWith和endsWith在这里是如何适用的。问题是他有一个字符串,其中包含一个应该 被使用。我看不出startsWith和endsWith在这里是如何适用的。