public Map<String, List<String>> parameters() {
        if (params == null) {
            params = decodeParams(uri, pathEndIdx(), charset, maxParams, semicolonIsNormalChar);
        }
        return params;
    }
@Test
    public void testExcludeFragment() {
        // a 'fragment' after '#' should be cuted (see RFC 3986)
        assertEquals("a", new QueryStringDecoder("?a#anchor").parameters().keySet().iterator().next());
        assertEquals("b", new QueryStringDecoder("?a=b#anchor").parameters().get("a").get(0));
        assertTrue(new QueryStringDecoder("?#").parameters().isEmpty());
        assertTrue(new QueryStringDecoder("?#anchor").parameters().isEmpty());
        assertTrue(new QueryStringDecoder("#?a=b#anchor").parameters().isEmpty());
        assertTrue(new QueryStringDecoder("?#a=b#anchor").parameters().isEmpty());
    }