С учетом URL-адреса для анализа:
URL url = new URL("https://google.com.ua/oauth/authorize?client_id=SS&response_type=code&scope=N_FULL&access_type=offline&redirect_uri=http://localhost/Callback");
Это решение собирает список пар:
List<AbstractMap.SimpleEntry<String, String>> list =
Pattern.compile("&").splitAsStream(url.getQuery())
.map(s -> Arrays.copyOf(s.split("="), 2))
.map(o -> new AbstractMap.SimpleEntry<String, String>(decode(o[0]), decode(o[1])))
.collect(toList());
Это решение с другой стороны, собирает карту (учитывая, что в URL-адресе может быть больше параметров с одним и тем же именем, но с разными значениями).
Map<String, List<String>> list =
Pattern.compile("&").splitAsStream(url.getQuery())
.map(s -> Arrays.copyOf(s.split("="), 2))
.collect(groupingBy(s -> decode(s[0]), mapping(s -> decode(s[1]), toList())));
Оба решения должны использовать служебную функцию для правильного декодирования параметров.
private static String decode(final String encoded) {
try {
return encoded == null ? null : URLDecoder.decode(encoded, "UTF-8");
} catch(final UnsupportedEncodingException e) {
throw new RuntimeException("Impossible: UTF-8 is a required encoding", e);
}
}
Думаю, вы на правильном пути с gnuplot. Для ваших нужд он очень мощный и гибкий.
Однако вы можете рассмотреть возможность записи в gnuplot непосредственно из вашего приложения, вместо того, чтобы создавать данные и загружать их. Доступен ANSI C API для gnuplot .
libgd . Но если у вас не так много данных для построения графика, gnuplot - хороший вариант, как предлагали другие.
В Mac OS X вы также можете передавать свои данные непосредственно в Plot, который поддерживает сценарии на основе Perl и интерфейс командной строки для неинтерактивная обработка данных:
Я нашел PLplot , который кажется интересным. Я пробую прямо сейчас, и я опубликую здесь краткий обзор об этом, так как я буду знать о нем больше.
Обновление: На первый взгляд кажется, что он плохо спроектирован, поскольку добавляет интерактивности приложению (IMHO, библиотека никогда не должна напрямую взаимодействовать с пользователем, если это не является целью библиотеки).