Вроде как всё работает должным образом, если в переменную String input отдельно вставлять ссылки для проверки. Не понимаю, что делаю не так, или что требуется от задачи.
package com.javarush.task.task15.task1527;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/*
Парсер реквестов
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String input = reader.readLine();
// Для проверок
//http://javarush.ru/alpha/index.html?lvl=15&view&name=Amigo
//http://javarush.ru/alpha/index.html?obj=3.14&name=Amigo
//String input = "javarush.ru/alpha/index.html?lvl=15&view&name=Aobjmigo&obj=3.14&name=&obj=djsdcd&oobj=3.0&obj=1&obj=2.3&obj=aaa";
Matcher parameters = Pattern.compile("(\\?|\\&)(\\w+)").matcher(input);
Matcher objValue = Pattern.compile("(obj=)(\\d+(\\.\\d+)?|\\w+)").matcher(input);
while(parameters.find()){
System.out.print(parameters.group(2) + " ");
}
System.out.print(System.lineSeparator());
while(objValue.find()){
//====== Не проходит последнее условие
/*if(Character.isDigit(objValue.group(2).charAt(0))){
alert(Double.parseDouble(objValue.group(2)));
}
else
alert(objValue.group(2));*/
//====== Не проходит предпоследнее условие
if(objValue.group(2).matches("\\d+\\.\\d+")){
alert(Double.parseDouble(objValue.group(2)));
}else if(objValue.group(2).matches("\\w+")){
alert(objValue.group(2));
}
}
}
public static void alert(double value) {
System.out.println("double: " + value);
}
public static void alert(String value) {
System.out.println("String: " + value);
}
}