решение простое, через сплит всё делал, на всякий случай комменты добавил, чтоб разобраться можно было
Программа должна вызывать метод alert с параметром double в случае, если значение параметра obj может быть корректно преобразовано в число типа double.
package com.javarush.task.task15.task1527;
/*
Парсер реквестов
*/
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 s = "http://javarush.ru/alpha/index.html?lvl=15&view&name=2.48&bon=abe";
String s = reader.readLine();
String[] strings = s.split("\\?");
//делим строку на 2 куска, до вопроса и после вопроса
ArrayList<String> names = new ArrayList<>();
//отбрасываем кусок до вопроса и делим остальнок на блоки [параметр=значение] или [параметр]
strings = strings[1].split("&");
String remember = null; // тут мы храним значения, пока не встретим double
for (int i = 0; i < strings.length; i++) {
// System.out.println(strings[i]);
String[] name = strings[i].split("=");
names.add(name[0]); //в этот список мы записываем параметры
if (name.length == 2){
if(name[0].equals("obj")){
remember = name[1];
}
// // если длина равна двум, значит там есть значение
// if (remember == null) remember = name[1];
// else if (!(remember.contains("."))){ //если у нас уже есть значение с плавающей точкой, то ничего не запоминаем
// remember = name[1];
// }
}
}
//выводим параметры
for (int i = 0; i < names.size(); i++) {
if (i== (names.size()-1)){
System.out.println(names.get(i));
} else System.out.print(names.get(i)+" ");
}
if (!(remember==null)){
if (remember.contains(".")){//если есть точка, то пытаемся вызвать alert double, если нет, то сразу стринг
try {
double d = Double.parseDouble(remember);
alert(d);
} catch (NumberFormatException e) {
alert(remember);//если это было все-таки не число, то вызываем стринг
}
} else alert(remember);
}
}
public static void alert(double value) {
System.out.println("double: " + value);
}
public static void alert(String value) {
System.out.println("String: " + value);
}
}