Java 两个分隔符之间的子字符串

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字符串类呢 这两个方法都返回布尔值

我有一个字符串:这是一个应该使用的URL

我只需要提取从http开始到pdf结束的URL:

这给我的输出是http://www.google.com/MyDoc.pdf 应该使用哪种方法

需要这方面的帮助。

为什么不使用startsWithhttp://和endsWith.pdf字符串类的方法呢

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

为什么不使用startsWithhttp://和endsWith.pdf mthods字符串类呢

这两个方法都返回布尔值,如果都返回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"));
试试这个

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在这里是如何适用的。