JavaRush /Java блог /Random /Помогите минимизировать код
Ferb
28 уровень

Помогите минимизировать код

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

public class Solution {
    public static void main(String[] args) throws IOException{
        //add your code here
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String URL = reader.readLine();
        String secURL = URL.substring(URL.indexOf("?")+1,URL.length());
        String[] arrURL = secURL.split("\\&");
        for(String s: arrURL){
            if(s.contains("=")) {
                System.out.print(s.substring(0, s.indexOf("="))+" ");
            }else {
                System.out.print(s + " ");
            }
        }
        for(String s: arrURL){
            if(s.contains("obj")) {
                System.out.println();
                try {
                    alert(Double.parseDouble(s.substring(s.indexOf("=")+1,s.length())));
                }catch (Exception e){
                    alert(s.substring(s.indexOf("=")+1,s.length()));
                }
            }
        }

    }

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

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

Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Сергей Уровень 36
19 ноября 2018
Можно написать регулярное выражение для строки таким образом, что все нужные вам значения будут складываться в группы. Решение будет буквально в пару строчек.
Сергеев Виктор Уровень 40 Master
15 ноября 2018
Не стоит выкладывать решения, кто-то может случайно увидеть и запомнить, думать он уже не сможет. А по решению, проверять есть ли = в параметре нет смысла (разве что показать свою идею чётче) Можно разделить сплитом. Если делителя в строке нет, он вернётся массив с 1 значением - исходная строка. Если делитель есть, то верется массив с поделенными значениями.
14 ноября 2018
Я не проверял вроде верно. public class Solution { public static void main(String[] args) throws IOException { //add your code here BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String URL = reader.readLine(); String secURL = URL.substring(URL.indexOf("?") + 1, URL.length()); String[] arrURL = secURL.split("\\&"); Map<String,String> map = new HashMap<>(); for (String s : arrURL) { String[] arr = s.split("="); map.put(arr[0],arr[1]); System.out.println(arr[0]+" " +arr[1]); } if(map.containsKey("obj")){ try { alert(Double.parseDouble(map.get("obj"))); } catch(NumberFormatException e) { alert("obj"); } } } public static void alert(double value) { System.out.println("double: " + value); } public static void alert(String value) { System.out.println("String: " + value); } }
Anonymous #1384518 Уровень 35 Expert
13 ноября 2018
Только минимизировал, как просилось:

String URL = new BufferedReader(new InputStreamReader(System.in)).readLine();
String[] arrURL = URL.substring(URL.indexOf("?")+1).split("&");
for(String s : arrURL){
    if(s.contains("=")) {
        System.out.print(s.substring(0, s.indexOf("="))+" ");
    }else {
        System.out.print(s + " ");
    }
}
System.out.println();
for(String s : arrURL){
    if(s.contains("obj")) {
        try {
            alert(Double.parseDouble(s=s.substring(s.indexOf("=")+1)));
        }catch (Exception e){
            alert(s);
        }
    }
}