Прошу подсказать верный путь.
Пробовал без проверки contains("."), начинает выводить 15 для alert(double) 15.0 .
А точнее как по другому проверить что число может быть преобразовано в дабл, это должно решить проблему и убрать реализацию через Exception.
package com.javarush.task.task15.task1527;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
/*
Парсер реквестов
Считать с консоли URL-ссылку.
Вывести на экран через пробел список всех параметров (Параметры идут после ? и разделяются &, например, lvl=15).
URL содержит минимум 1 параметр.
Выводить параметры нужно в той же последовательности, в которой они представлены в URL.
Если присутствует параметр obj, то передать его значение в нужный метод alert.
alert(double value) - для чисел (дробные числа разделяются точкой)
alert(String value) - для строк
Обрати внимание на то, что метод alert необходимо вызывать ПОСЛЕ вывода списка всех параметров на экран.
Пример 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
Требования:
1. Программа должна считывать с клавиатуры только одну строку.
2. Класс Solution не должен содержать статические поля.
3. Программа должна выводить данные на экран в соответствии с условием.
4. Программа должна вызывать метод alert с параметром double в случае, если значение параметра obj может быть корректно преобразовано в число типа double.
5. Программа должна вызывать метод alert с параметром String в случае, если значение параметра obj НЕ может быть корректно преобразовано в число типа double.
*/
public class Solution {
public static void main(String[] args) throws IOException {
//add your code here
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String substring = "";
String str = reader.readLine();
int index = 0;
while (str.length() > index){
if (str.charAt(index) == '?'){
str = str.substring(index + 1);
break;
}
index++;
}
//System.out.println(str);
List<String> list = new ArrayList<>(Arrays.asList(str.split("&")));
Map<String,String> map = new HashMap<>();
for (String string:list) {
String[] listArray = string.split("=");
if(listArray.length > 1) {
map.put(listArray[0], listArray[1]);
}
else map.put(listArray[0],"null");
}
// System.out.println(map.keySet());
Set<String> keys = map.keySet();
String temp = "";
int countKeys = 0;
for (String key:keys) {
countKeys++;
if(countKeys == map.keySet().size()) {
temp = temp + key;
}
else temp = temp + key + " ";
}
//System.out.println(temp);
Iterator<Map.Entry<String,String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry<String,String> pair = iterator.next();
if(pair.getValue() != "null" && pair.getValue().contains(".")) {
try {
alert(Double.parseDouble(pair.getValue()));
}catch (NumberFormatException ex) {
alert(temp);
}
}
else if(!iterator.hasNext()) alert(temp);
}
}
public static void alert(double value) {
System.out.println("double: " + value);
}
public static void alert(String value) {
System.out.println("String: " + value);
}
}