0

指定されたクエリ文字列の paramName に対して paramValue を返す Java ユーティリティ メソッドを作成したい

Pattern p = Pattern.compile("\\&?(\\w+)\\=  (I don't know what to put here) ");

public String getParamValue(String entireQueryString, String paramName)
{
    Matcher m = p.matcher(entireQueryString);
    while(m.find()) {
        if(m.group(1).equals(paramName)) {
            return m.group(2);
        }
    }
    return null;
}

サーブレットからこのメソッドを呼び出します。

    String qs = request.getQueryString(); //action=initASDF&requestId=9078-32&redirect=http://www.mydomain.com?actionId=4343
    System.out.println(getParamValue(qs, "requestId"));

出力は、9078-32 である必要があります。

4

3 に答える 3

1

それを行うには、適切なAPIを使用します。request.getParameter("requestId")

于 2012-09-18T11:34:02.007 に答える
1

正規表現否定グループを使用できます。この他の SO の質問を参照してください:正規表現と文字グループ全体の否定

を除くすべてを取得する必要があります&

于 2012-09-18T11:13:11.483 に答える
0

アンパサンド (&) に基づいて文字列を分割し、結果の配列でキーを検索してください (等号まで調べてください)。

String.split() へのリンクは次のとおりです: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split%28java.lang.String%29

これが私が話しているタイプのものです:

private static final String KEY_VALUE_SEPARATOR = "=";
private static final String QUERY_STRING_SEPARATOR = "&";

public String getParamValue(String entireQueryString, String paramName) {
    String[] fragments = entireQueryString.split(QUERY_STRING_SEPARATOR);
    for (String fragment : fragments){
        if (fragment.substring(0, fragment.indexOf(KEY_VALUE_SEPARATOR)).equalsIgnoreCase(paramName)){
            return fragment.substring(fragment.indexOf(KEY_VALUE_SEPARATOR)+1);
        }
    }
    throw new RuntimeException("can't find value");
}

最後の Exception はかなりくだらないアイデアですが、これは重要な部分ではありません。

于 2012-09-18T11:19:53.593 に答える