Уже глаз дёргается от этой задачи. Всё учла и проверяла для всех возможных входных данных (не только для тех, которые в самой задаче, но и для других, которые нашла в обсуждениях)
package com.javarush.task.task15.task1527;
/*
Парсер реквестов
*/
import javax.swing.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String input = reader.readLine();
int i = input.indexOf("?");
char[] ch = new char[input.length() - i];
input.getChars(i+1, input.length(), ch, 0);
String values = new String(ch);
ArrayList<String> list = new ArrayList<>();
ArrayList<String> listValue = new ArrayList<>();
while(!(values.isEmpty())) {
int ind = values.indexOf("&");
if(ind != -1) {
char[] tmpCh = new char[values.length() - ind];
values.getChars(0, ind, tmpCh, 0);
String tmp = new String(tmpCh);
if(tmp.startsWith("obj=")) {
int indValue = tmp.indexOf("obj");//+3
char[] tmpValue = new char[tmp.length() - (indValue + 3)];
tmp.getChars(indValue + 4, tmp.length(), tmpValue, 0);
String value = new String(tmpValue);
listValue.add(value);
}
if (tmp.contains("=")) {
int indCont = tmp.indexOf("=");
char[] tmpCont = new char[tmp.length() - indCont];
tmp.getChars(0, indCont, tmpCont, 0);
String param = new String(tmpCont);
list.add(param);
} else {
list.add(tmp);
}
values = values.substring(ind+1);
}
else {
String tmp = values;
if(tmp.startsWith("obj=")) {
int indValue = tmp.indexOf("obj");//+3
char[] tmpValue = new char[tmp.length() - (indValue + 3)];
tmp.getChars(indValue + 4, tmp.length(), tmpValue, 0);
String value = new String(tmpValue);
listValue.add(value);
}
if (tmp.contains("=")) {
int indCont = tmp.indexOf("=");
char[] tmpCont = new char[tmp.length() - indCont];
tmp.getChars(0, indCont, tmpCont, 0);
String param = new String(tmpCont);
list.add(param);
}
else {
list.add(tmp);
}
break;
}
}
for (String p: list) {
p = p.trim();
System.out.print(p + " ");
}
System.out.println();
for(String v : listValue){
try {
alert(Double.parseDouble(v));
} catch (NumberFormatException e){
alert(v);
}
}
}
public static void alert(double value) {
System.out.println("double: " + value);
}
public static void alert(String value) {
System.out.println("String: " + value);
}
}