0

私はこの文字列を持っています:

"http://my/website/collections/index.php?s=1&schema=http:/my/web/fe7cd50991b11f51050902sddaf3e042bd5467/idApp=19"

文字列からこのトークンを抽出したい:fe7cd50991b11f51050902sddaf3e042bd5467

ウェブサイトは変わる可能性がありますが、変えることができないと思うのは、常に取得する必要のある文字列トークンが「/idApp="」の左側にあるということだけです。

それを解決するための最も効率的な方法はどれですか?

ありがとう。

4

6 に答える 6

3
String url = "http://my/website/collections/index.php?s=1&schema=http:/my/web/fe7cd50991b11f51050902sddaf3e042bd5467/idApp=19";
String[] tokens = url.split("/");
String searched = tokens[array.length - 2];

これは、トークンが毎回prelastである場合に機能します。それ以外の場合は、Arrayを調べて、現在のトークンが条件に一致するかどうかを確認し、前にトークンを取得する必要があります。コード内:

int tokenId = 0;
for (int i = 0; i < tokens.length; i++) {
  if (token[i].equals("/idApp=")) {
    tokenId = i - 1;
    break;
  }
}
String rightToken = tokens[tokenId];
于 2012-09-05T08:23:51.437 に答える
2

トークンが数字と文字しか使用できないと仮定すると、次のようなものを使用できます。

/idApp=文字列の前にある一連の数字と文字に一致します。

これは、標準的で読みやすい方法であるという点で「効率的」ですが、この文字列を見つけることが本当にパフォーマンスになるかどうかを慎重に検討する必要がありますが、パフォーマンス効率の高い方法があるかもしれません。ボトルネック。

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class TestRegexp {
    public static void main(String args[]) {
        String text = "http://my/website/collections/index.php?s=1&schema=http:/my/web/fe7cd50991b11f51050902sddaf3e042bd5467/idApp=19";
        Pattern pattern = Pattern.compile("(\\w+)/idApp=");
        Matcher m = pattern.matcher(text);
        if (m.find()) {
            System.out.println(m.group(1)); 
        }

    }
}
于 2012-09-05T08:29:53.180 に答える
1

ここでは正規表現は必要ありません。絶対。タスクは、文字列の一部をカットすることであり、過度に複雑にしないでください。シンプルさが鍵です。

int appIdPosition = url.lastIndexOf("/idApp=");
int slashBeforePosition = url.lastIndexOf("/", appIdPosition - 1);
String token = url.substring(slashBeforePosition + 1, appIdPosition);
于 2012-09-05T08:31:29.103 に答える
0

正規表現を使用できます

これらの2つのパッケージはあなたを助けます

  • java.util.regex.Matcher
  • java.util.regex.Pattern
于 2012-09-05T08:23:38.857 に答える
0

単純な2回の分割は、複数のパラメーターに対して機能します。最初に分割し"idApp"、次にに分割し/ます。

次のコードは、パラメーターの後に複数のパラメーターがある場合でも機能しidAppます。

String url = "http://my/website/collections/index.php?s=1&schema=http:/my/web/fe7cd50991b11f51050902sddaf3e042bd5467/idApp=19";
String[] tokens = url.split("idApp");
String[] leftPartTokens = tokens[0].split("/");
String searched = leftPartTokens[leftPartTokens.length - 1];
System.out.println(searched);
于 2012-09-05T08:31:36.023 に答える
0

文字列を使って何かをするときは、常に次のことを確認してください。

http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringUtils.html

これが私の答えです...

public static void main(String[] args) {
    //Don't forget: import static org.apache.commons.lang.StringUtils.*;
    String url2 = "http://my/website/collections/index.php?s=1&schema=http:/my/web/fe7cd50991b11f51050902sddaf3e042bd5467/idApp=19";
    String result =  substringAfterLast("/", substringBeforeLast(url2,"/")) ;
    System.out.println(result);
}
于 2012-09-05T08:44:51.457 に答える