level15.lesson12.home09

Программа работает, но не проходит тест. Подскажите в чем bug?
/* Парсер реквестов
Считать с консоли URl ссылку.
Вывести на экран через пробел список всех параметров (Параметры идут после ? и разделяются &, например, lvl=15).
URL содержит минимум 1 параметр.
Если присутствует параметр obj, то передать его значение в нужный метод alert.
alert(double value) - для чисел (дробные числа разделяются точкой)
alert(String value) - для строк

Пример 1
Ввод:
http://javarush.ru/alpha/index.html?lvl=15&view&name=Amigo
Вывод:
lvl view name

Пример 2
Ввод:
http://javarush.ru/alpha/index.html?obj=3.14&name=Amigo
Вывод:
obj name
double 3.14
*/

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

public class Solution {
    public static void main(String[] args) throws IOException
    {
        BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
        URL url = new URL(r.readLine());
        String s = url.toString();
        String s1 = s.substring(s.indexOf("?")+1);
        if (s1.contains("&"))
        {
            String[] s2 = s1.split("&");
            for (String line : s2)
            {
                if (line.contains("=")&&!line.contains("obj"))
                {
                    String attributeName = line.substring(0, line.indexOf("="));
                    System.out.print(attributeName+" ");
                } else  if (!line.contains("=")&&!line.contains("obj"))
                {
                    System.out.print(line+" ");
                } else {
                    String attributeName = line.substring(0, line.indexOf("="));
                    System.out.print(attributeName+" ");
                }
            }
            System.out.println("");
            if (s1.contains("obj"))
            {
                String value = s1.substring(s1.indexOf("obj=")+4, s1.indexOf("&"));
                if (value.contains("."))
                {
                    try
                    {
                        double d = Double.parseDouble(value);
                        alert(d);
                    }
                    catch (NumberFormatException e)
                    {
                    }
                } else
                    alertS(value);
            }
        } else {
            if (s1.contains("=")&&!s1.contains("obj"))
                System.out.println(s1.substring(0,s1.indexOf("=")));
            else if (s1.contains("=")&&s1.contains("obj"))
            {
                System.out.println(s1.substring(0,s1.indexOf("=")));
                try
                {
                    double value = Double.parseDouble(s1);
                    alert(value);
                }
                catch (NumberFormatException e)
                {
                    alertS(s1);
                }
            }
            else
                System.out.println(s1);
        }

    }
    public static void alert(double value) {
        System.out.println("double " + value);
    }

    public static void alertS(String value) {
        System.out.println("String " + value);
    }
}

4 комментария

Appolinariy
попробуйте протестировать вот на такой строке
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
steelman
попробовал, выкидывает ошибку
"C:\Program Files\Java\jdk1.7.0_79\bin\java" -Didea.launcher.port=7534 "-Didea.launcher.bin.path=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2016.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.7.0_79\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\access-bridge.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfxrt.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\rt.jar;C:\Users\missk\Desktop\HomeWork\JavaRushHomeWork\out\production\JavaRushHomeWork;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2016.3\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.javarush.test.level15.lesson12.home09.Solution
http://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 
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -24
	at java.lang.String.substring(String.java:1911)
	at com.javarush.test.level15.lesson12.home09.Solution.main(Solution.java:57)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
lvl view name obj name obj oobj obj obj obj 

Process finished with exit code 1
Appolinariy
что-то не то в 57 строке судя по всему
(at com.javarush.test.level15.lesson12.home09.Solution.main(Solution.java:57))
в строке идет обращение к недостижимому индексу
(java.lang.StringIndexOutOfBoundsException: String index out of range: -24)
steelman
Спасибо за помощь. Пофиксил код и чудо произошло, хоть и с 25 попытки)))
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.