1) первым паттерном обрезаю URL по знаку вопроса
2) методом removeCharAt удаляю знак вопроса
3) вторым паттерном делю строку по "&" и если в ней есть "=", obj и значение записываю в HashMap, если нет "=" сразу вывожу obj
4) в конце перебираю HashMap и если значение obj-та можно преобразовать в double, вызываю alert для double, если же нельзя - в catch вызываю alert для String.
package com.javarush.task.task15.task1527;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Парсер реквестов
*/
public class Solution {
public static void main(String[] args) throws IOException {
//add your code here
//add your code here
HashMap<String, String> map = new HashMap<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str = reader.readLine();
String s = null;
Pattern pattern = Pattern.compile("\\?.+.");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
s = str.substring(matcher.start(), matcher.end());
//System.out.println(s);
}
s = removeCharAt(s, 0);
double d;
Pattern pattern2 = Pattern.compile("&");
String[] strings = pattern2.split(s);
for (String s1 : strings) {
if (!s1.contains("=")) {
System.out.print(s1 + " ");
continue;
}
strings = s1.split("=");
System.out.print(strings[0] + " ");
map.put(strings[0], strings[1]);
}
System.out.println();
for (Map.Entry<String, String> pair : map.entrySet())
{
String value = pair.getValue();
try {
d = Double.parseDouble(value);
alert(d);
}catch (Exception e){
alert(value);
}
}
}
public static String removeCharAt(String s, int pos) {
return s.substring(0, pos) + s.substring(pos + 1);
}
public static void alert(double value) {
System.out.println("double: " + value);
}
public static void alert(String value) {
System.out.println("String: " + value);
}
}