LoginSignup
6
2

URLのクエリパラメータを置き換えたい

Last updated at Posted at 2024-04-15

毎回必要な時に調べ直しているので備忘録。

Uri.BuilderでGETのパラメータをreplaceできるメソッドがあると思いこんでいるも見当たらないため、調査に毎回時間を浪費していた。

以下の手順でやりたいことは実現出来る。

  1. 全てのqueryParamsを取得できるようにURLをUri.parseする
  2. Uri.Builder.clearQuery()で全てのqueryParamsを削除する
  3. 置き替えたいkeyが存在していたら置き替えたい値をUri.Builder.appendQueryParameterで新規追加する
  4. 上記3以外はそのままUri.Builder.appendQueryParameterで新規追加する

■置き替え前後のURLは以下
クエリパラメータ置き替え前URL: https://exsample.com/?key=value&key2=value2
クエリパラメータ置き替え後URL: https://exsample.com/?key=newValue&key2=value2

■実ソースは以下

val KEY = "key"// 置き替えたいパラメータのKey
val newValue = "newValue"// 置き替えたいパラメータのValue
val url = "https://exsample.com/?key=value&key2=value2"

val replacedUrl: String = url.let {
    val uri = Uri.parse(it)
    
    // Uri.Builder.clearQuery()で全てのqueryParamsを削除
    val uriBuilder = uri.buildUpon().clearQuery()

    // 全GETパラメータを生成しなおし
    uri.queryParameterNames.map {  queryParam ->
        if (queryParam == KEY) {
            // 置き替えたいKeyだったら新しいValueで新規生成
            uriBuilder.appendQueryParameter(queryParam, newValue)
        } else {
            // 置き換え不要のKeyはそのまま元から入っていたValueで新規生成
            uriBuilder.appendQueryParameter(queryParam, getQueryParameter(queryParam))
        }
    }
    uriBuilder.build().toString()
}

// 結果表示
Logger.d("replacedUrl: $replacedUrl")

以上。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2