При тестировании явных несоответствий требований не выявил, но видимо они есть) Хэлп, что не так?
package com.javarush.task.task15.task1527;
/*
Парсер реквестов
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Parameter;
import java.util.ArrayList;
import java.util.List;
public class Solution {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String url;
try {
url = reader.readLine(); // считываем урл
int indexOfStartParameters = url.indexOf('?') + 1; // определяем индеркс разделителя адреса и параметров
String substring = url.substring(indexOfStartParameters, url.length()-1); // отрезаем параметры от адреса
while (true)
if (substring.equals("")) break; // выход из цикла для пустой строки
else {
int endIndexOfOneParameter = substring.indexOf('&'); // определяем индекс первого разделителя параметров
if (endIndexOfOneParameter == -1) { // если не найден
parameterTypeAction(substring); // то значит параметр в строке только один, обрабатываем его
break; // и выходим из цикла
}
else {
String parameter = substring.substring(0, endIndexOfOneParameter); // если найден, то отделяем его
parameterTypeAction(parameter); // и обрабатываем
substring = substring.substring(endIndexOfOneParameter+1); // Отрезаем обработанный параметр и разделитель от строки
}
}
System.out.println(""); //разделяем строку с именами параметров и обработанные obj
for (double dobj : objLists.getdList()) alert(dobj); // вызываем аллерт для всех Double obj
for (String sobj : objLists.getsList()) alert(sobj); // вызываем аллерт для всех String obj
}
catch (IOException ignored) {}
}
public static void alert(double value) {
System.out.println("double: " + value);
}
public static void alert(String value) {
System.out.println("String: " + value);
}
public static void parameterTypeAction(String parameter) { // метод определения типа параметра
int indexOfEndParameterName = parameter.indexOf('='); // определяем индекс разделителя имени параметра и его значения
if (indexOfEndParameterName == -1) { // если его нет,
System.out.print(parameter + " "); // то выводим имя параметра в консоль
}
else {
String parameterName = parameter.substring(0, indexOfEndParameterName); //определяем имя параметра
if (parameterName.equals("obj")) { // если obj
objLists objects = objLists.getObjects(); // получаем экземпляр класса, в котором хранятся листы всех значений параметров obj
objects.add(parameter, indexOfEndParameterName); // добавляем значение параметра obj в лист
}
System.out.print(parameterName + " "); // иначе выводим имя параметра
}
}
public static class objLists { // класс с листами значений obj. По шаблону синглтон
private static objLists objects = new objLists();
private static ArrayList<Double> dList = new ArrayList<>(); // Лист для Double значений
private static ArrayList<String> sList = new ArrayList<>(); // Лист для String значений
private objLists() {}
public static objLists getObjects() {
return objects;
}
public void add(String parameter, int indexOfEndParameterName) { // Определение типа параметра и добавление в нужный лист
try {
Double dObj = Double.parseDouble(parameter.substring(indexOfEndParameterName + 1));
dList.add(dObj);
}
catch (NumberFormatException e) {
String sObj = parameter.substring(indexOfEndParameterName + 1);
sList.add(sObj);
}
}
public static ArrayList<Double> getdList() { // возврат листа Double значений
return dList;
}
public static ArrayList<String> getsList() { // возврат листа String значений
return sList;
}
}
}