On Android you can use [`android.net.Uri`][1]. The following allows to create an `Uri.Builder` from an existing URL as `String` and then append:

    Uri.parse(baseUrl) // Create Uri from String
        .buildUpon()   // Creates a "Builder"
        .appendEncodedPath("path/to/add")
        .appendQueryParameter("at_ref", "123") // To add ?at_ref=123
        .fragment("anker") // To add #anker
        .build()

Note that `appendEncodedPath` doesn't expect a leading `/` and only contains a check if the "baseUrl" ends with one, otherwise one is added before the path.

According to the docs, this supports 

 * Absolute hierarchical URI reference following the pattern
    * `<scheme>://<authority><absolute path>?<query>#<fragment>`

 * Relative URI with pattern
    * `<relative or absolute path>?<query>#<fragment>`
    * `//<authority><absolute path>?<query>#<fragment>`

 * Opaque URI with pattern
    * `<scheme>:<opaque part>#<fragment>`

  [1]: https://developer.android.com/reference/android/net/Uri.Builder.html