2

私は次のような文字列を持っています:「これは使用すべきURLhttp://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の?後に続く)、コロンの順に一致します。
于 2012-04-16T08:57:30.900 に答える
1

StringクラスのstartsWith( "http://")およびendsWith( "。pdf ")mthodsを使用してみませんか。

両方のメソッドがブール値を返します。両方がtrueを返す場合、条件は成功します。それ以外の場合、条件は失敗します。

于 2012-04-16T08:43:13.933 に答える
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 に答える
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
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 に答える
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 に答える