Четко по требованию не знаю как решить. Но зато, вроде как, работает =)
package com.javarush.task.task15.task1527;
/*
Парсер реквестов
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
public class Solution {
public static void main(String[] args) throws IOException {
//add your code here
BufferedReader reader =new BufferedReader(new InputStreamReader(System.in));
String stringEnter = reader.readLine();
stringEnter = stringEnter.substring(stringEnter.indexOf("?")+1);
String stringEditParametr = "";
LinkedList<String>list = new LinkedList<>();
for (int i = 0;i<stringEnter.length();i++){
if ((stringEnter.charAt(i)=='=')|(stringEnter.charAt(i)=='&')){
list.add(stringEditParametr);
stringEditParametr = "";
if (stringEnter.charAt(i)=='='){
list.add("=");
}else if (stringEnter.charAt(i)=='&'){
list.add("&");
}
}else {
stringEditParametr += stringEnter.charAt(i);
}
}
list.add(stringEditParametr);
boolean priznakParametr = true;//самый первый элемент - это имя параметра
for (int j = 0;j<list.size();j++){//выводим только имена параметров
if (priznakParametr){
//alert(list.get(j));
System.out.print(list.get(j)+" ");
priznakParametr = false;
}
if (list.get(j).equals("&")){
priznakParametr = true;
}
}
System.out.println();
//Если значения с плавающей точкой, то выводим их через alert(double)
boolean priznakValue = false;
double d = 0;
for (int k = 0; k<list.size();k++){
if ((priznakValue)&(list.get(k).contains("."))){
try {
d = Double.parseDouble(list.get(k));
}catch (Exception e){
e.getStackTrace();
}
alert(d);
priznakValue = false;
}
if (list.get(k).equals("=")){
priznakValue = true;
}
}
}
public static void alert(double value) {
System.out.println("double: " + value);
}
public static void alert(String value) {
System.out.println("String: " + value);
}
}